演练:设置 WPF 内容的样式
本文介绍如何将样式应用到 Windows 窗体上承载的 Windows Presentation Foundation (WPF) 控件中。
先决条件
若要完成本演练,必须具有 Visual Studio。
创建项目
打开 Visual Studio,用 Visual Basic 或 Visual C# 创建名为 StylingWpfContent
的新 Windows 窗体应用程序项目。
注意
承载 WPF 内容时,仅支持 C# 和 Visual Basic 项目。
创建 WPF 控件类型
将 WPF 控件类型添加到项目后,就可在 ElementHost 控件中托管它。
将新的 WPF UserControl 项目添加到解决方案。 使用控件类型的默认名称,
UserControl1.xaml
。 有关详细信息,请参阅演练:设计时在 Windows 窗体上创建新的 WPF 内容。在设计视图中,请确保已选中
UserControl1
。将 System.Windows.Controls.Button 控件添加到 UserControl,并将 Content 属性的值设置为“Cancel”。
将第二个 System.Windows.Controls.Button 控件添加到 UserControl,并将 Content 属性的值设置为“OK”。
生成项目。
将样式应用到 WPF 控件
可对 WPF 控件应用不同样式以更改它的外观和行为。
在 Windows 窗体设计器中打开
Form1
。在“工具箱”中,双击
UserControl1
在窗体上创建UserControl1
的实例。UserControl1
的实例托管在名为elementHost1
的新 ElementHost 控件中。在
elementHost1
的智能标记面板中,单击下拉列表中的“编辑所承载的内容”。将在 WPF 设计器中打开
UserControl1
。在 XAML 视图中,将以下 XAML 插到
<UserControl>
开始标记后面。 此 XAML 创建具有对比渐变边框的渐变。 单击此控件后,将更改渐变以生成按下按钮的外观。 有关详细信息,请参阅样式设置和模板化。<UserControl.Resources> <LinearGradientBrush x:Key="NormalBrush" EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="#FFF" Offset="0.0"/> <GradientStop Color="#CCC" Offset="1.0"/> </LinearGradientBrush> <LinearGradientBrush x:Key="PressedBrush" EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="#BBB" Offset="0.0"/> <GradientStop Color="#EEE" Offset="0.1"/> <GradientStop Color="#EEE" Offset="0.9"/> <GradientStop Color="#FFF" Offset="1.0"/> </LinearGradientBrush> <LinearGradientBrush x:Key="NormalBorderBrush" EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="#CCC" Offset="0.0"/> <GradientStop Color="#444" Offset="1.0"/> </LinearGradientBrush> <LinearGradientBrush x:Key="BorderBrush" EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="#CCC" Offset="0.0"/> <GradientStop Color="#444" Offset="1.0"/> </LinearGradientBrush> <LinearGradientBrush x:Key="PressedBorderBrush" EndPoint="0,1" StartPoint="0,0"> <GradientStop Color="#444" Offset="0.0"/> <GradientStop Color="#888" Offset="1.0"/> </LinearGradientBrush> <Style x:Key="SimpleButton" TargetType="{x:Type Button}" BasedOn="{x:Null}"> <Setter Property="Background" Value="{StaticResource NormalBrush}"/> <Setter Property="BorderBrush" Value="{StaticResource NormalBorderBrush}"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type Button}"> <Grid x:Name="Grid"> <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"/> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsPressed" Value="true"> <Setter Property="Background" Value="{StaticResource PressedBrush}" TargetName="Border"/> <Setter Property="BorderBrush" Value="{StaticResource PressedBorderBrush}" TargetName="Border"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </UserControl.Resources>
通过插入“取消”按钮的
<Button>
标记中的以下 XAML,将上一步中定义的SimpleButton
样式应用到“取消”按钮。Style="{StaticResource SimpleButton}
按钮声明将类似于以下 XAML:
<Button Height="23" Margin="41,52,98,0" Name="button1" VerticalAlignment="Top" Style="{StaticResource SimpleButton}">Cancel</Button>
生成项目。
在 Windows 窗体设计器中打开
Form1
。将新样式应用到按钮控件中。
在“调试”菜单中,选择“启动调试”以运行应用程序。
单击“确定”和“取消”按钮并查看差异。