演练:设置 Windows Presentation Foundation 内容的样式
更新:2007 年 11 月
本演练演示如何将样式应用于 Windows 窗体上承载的 Windows Presentation Foundation (WPF) 控件。
在本演练中,您将执行下列任务:
创建项目。
创建 WPF 控件类型。
对 WPF 控件应用样式。
说明: |
---|
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 |
先决条件
您需要以下组件来完成本演练:
- Visual Studio 2008.
创建项目
第一步是创建 Windows 窗体项目。
说明: |
---|
当承载 WPF 内容时,仅支持 C# 和 Visual Basic 项目。 |
创建项目
- 使用 Visual Basic 或 Visual C# 创建一个名为 StylingWpfContent 的新 Windows 窗体应用程序项目。有关更多信息,请参见如何:创建 Windows 应用程序项目。
创建 WPF 控件类型
将 WPF 控件类型添加到项目后,可以在 ElementHost 控件中承载它。
创建 WPF 控件类型
向项目添加新的 WPF UserControl。使用该控件类型的默认名称 UserControl1.xaml。有关更多信息,请参见演练:设计时在 Windows 窗体上创建新的 Windows Presentation Foundation 内容。
在“设计”视图中,确保选中 UserControl1。有关更多信息,请参见如何:在设计图面上选择和移动元素。
向 UserControl 添加一个 System.Windows.Controls.Button 控件,并将 Content 属性的值设置为“取消”。
向 UserControl 添加第二个 System.Windows.Controls.Button 控件,并将 Content 属性的值设置为“确定”。
生成项目。
对 WPF 控件应用样式
可以对 WPF 控件应用不同的样式,以更改其外观和行为。
对 WPF 控件应用样式
在 Windows 窗体设计器中打开 Form1。
在“工具箱”中,双击 UserControl1 在窗体上创建 UserControl1 的一个实例。
UserControl1 的实例承载在一个名为 elementHost1 的新 ElementHost 控件中。
在 elementHost1 的智能标记面板中,单击下拉列表中的“编辑所承载的内容”。
在 WPF 设计器中打开 UserControl1。
在“XAML”视图中,在 <UserControl> 的开始标记后面插入以下 XAML。
此 XAML 创建具有对比渐变边框的渐变。单击该控件时,可以更改渐变,以生成一个按下按钮的外观。有关更多信息,请参见样式设置和模板化。
[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>
[xaml]
<Button Height="23" Margin="41,52,98,0" Name="button1" VerticalAlignment="Top"
Style="{StaticResource SimpleButton}">Cancel</Button>