WPF(代码实现XAML)


 将下述的XAML通过代码实现:


    
        
            
            
        
        
            
                
            
        
        

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

void InitView()
{
    Window window = new Window
    {
        Title = "Window3", Height = 206, Width = 509,
        WindowStartupLocation = WindowStartupLocation.CenterScreen
    };

    Canvas canvas = new Canvas();
    canvas.Name = "canvas1";
    canvas.Background = new SolidColorBrush(Color.FromArgb(0xFF, 0xCF, 0xC9, 0xC9));
    canvas.Margin = new Thickness(0, 0, 1, 0);

    canvas.Resources.Add("redSolid", new SolidColorBrush(Colors.Red));

    #region 样式temp1
    Style styleTemp1 = new Style { TargetType = typeof(Button) };
    styleTemp1.Setters.Add(new Setter
    {
        Property = Button.ForegroundProperty,
        Value = new SolidColorBrush(Colors.White)
    });
    styleTemp1.Setters.Add(new Setter
    {
        Property = Button.BackgroundProperty,
        Value = new SolidColorBrush(Colors.Gray)
    });

    //创建控件模板
    ControlTemplate btnTemplate = new ControlTemplate { TargetType = typeof(Button) };
    Setter temp1Temp = new Setter { Property = Button.TemplateProperty };
    temp1Temp.Value = btnTemplate;
    styleTemp1.Setters.Add(temp1Temp);

    //创建鼠标移过触发器
    Trigger overTrigger = new Trigger { Property = Button.IsMouseOverProperty, Value = true };
    overTrigger.Setters.Add(new Setter
    {
        TargetName = "ellipse1",
        Property = Ellipse.FillProperty,
        Value = new SolidColorBrush(Colors.AliceBlue)
    });
    overTrigger.Setters.Add(new Setter
    {
        Property = Button.ForegroundProperty,
        Value = canvas.Resources["redSolid"]
    });
    btnTemplate.Triggers.Add(overTrigger);

    //创建控件模板根节点
    FrameworkElementFactory factoryGrid = new FrameworkElementFactory(typeof(Grid));
    //创建椭圆填充色
    LinearGradientBrush lineBrush = new LinearGradientBrush
    {
        StartPoint = new Point(0, 0),
        EndPoint = new Point(0, 1)
    };
    lineBrush.GradientStops.Add(new GradientStop { Offset = 0, Color = Color.FromArgb(0xFF, 0x7E, 0x7E, 0x7E) });
    lineBrush.GradientStops.Add(new GradientStop { Offset = 1, Color = Colors.Black });
    //创建椭圆节点
    FrameworkElementFactory fEllipse = new FrameworkElementFactory(typeof(Ellipse), "ellipse1");
    fEllipse.SetValue(Ellipse.NameProperty, "ellipse1");
    fEllipse.SetValue(Ellipse.StrokeThicknessProperty, 0.5);
    fEllipse.SetValue(Ellipse.StrokeProperty, new SolidColorBrush(Colors.Aqua));
    fEllipse.SetValue(Ellipse.FillProperty, lineBrush);
    factoryGrid.AppendChild(fEllipse);  //将椭圆节点添加到根节点
    //创建文本节点
    FrameworkElementFactory fPresenter = new FrameworkElementFactory(typeof(ContentPresenter));
    fPresenter.SetValue(ContentPresenter.VerticalAlignmentProperty, VerticalAlignment.Center);
    fPresenter.SetValue(ContentPresenter.HorizontalAlignmentProperty, HorizontalAlignment.Center);
    fPresenter.SetValue(ContentPresenter.ContentProperty, new TemplateBindingExtension(Button.ContentProperty));
    factoryGrid.AppendChild(fPresenter);  //将文本节点添加到根节点
    btnTemplate.VisualTree = factoryGrid;

    canvas.Resources.Add("temp1", styleTemp1);
    #endregion

    TextBox tb = new TextBox { Name = "tb1", Height = 23, Text = "TextBox", Width = 120 };
    canvas.Children.Add(tb);
    Canvas.SetLeft(tb, 60);
    Canvas.SetTop(tb, 75);
    //创建tb1的样式
    Style tbStyle = new Style { TargetType = typeof(TextBox) };
    //设置tb1的前景色
    tbStyle.Setters.Add(new Setter
    {
        Property = TextBox.ForegroundProperty,
        Value = new SolidColorBrush(Colors.Aqua)
    });
    //创建tb1的文本触发器
    Trigger textTrigger = new Trigger { Property = TextBox.TextProperty, Value = "123" };
    textTrigger.Setters.Add(new Setter
    {
        Property = TextBox.ForegroundProperty,
        Value = canvas.Resources["redSolid"]
    });
    tbStyle.Triggers.Add(textTrigger);
    //创建tb1的事件触发器
    BeginStoryboard beginStoryboard = new BeginStoryboard();
    beginStoryboard.Storyboard = new Storyboard();
    ObjectAnimationUsingKeyFrames objectAnimationUsingKeyFrames = new ObjectAnimationUsingKeyFrames();
    DiscreteObjectKeyFrame discreteObjectKeyFrame = new DiscreteObjectKeyFrame
    {
        Value = new SolidColorBrush(Colors.Gold),
        KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))
    };
    objectAnimationUsingKeyFrames.KeyFrames.Add(discreteObjectKeyFrame);
    beginStoryboard.Storyboard.Children.Add(objectAnimationUsingKeyFrames);
    Storyboard.SetTargetProperty(objectAnimationUsingKeyFrames, new PropertyPath(TextBox.BackgroundProperty));
    EventTrigger enterEvent = new EventTrigger(TextBox.MouseEnterEvent);
    enterEvent.Actions.Add(beginStoryboard);
    tbStyle.Triggers.Add(enterEvent);
    tb.Style = tbStyle;

    Button btn = new Button
    {
        Content = "Button",
        Height = 50,
        Width = 100,
        Style = canvas.Resources["temp1"] as Style
    };
    canvas.Children.Add(btn);
    Canvas.SetLeft(btn, 215);
    Canvas.SetTop(btn, 60);

    window.Content = canvas;
    window.Show();
}

WPF