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();
}