更改控件外观

记录更改控件外观学习

更改控件外观有三种方法:属性、Style、ControlTemplate。

Style:可以一次对多个控件设置属性。

ContentTemplate: 自定义Control外观,利用行为更改外观。

属性:<Window x:Class="WpfApp1.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        mc:Ignorable="d"        Title="MainWindow" Height="450" Width="800">    <Grid>        <Button FontSize="14"                FontWeight="Bold">            <Button.Background>                <!--Background类型是个brush LinearGradientBrush继承brush,因此作为Background值-->                <LinearGradientBrush StartPoint="0,0.5"                                     EndPoint="1,0.5">                    <GradientStop Color="Green"                                  Offset="0.0" />                    <GradientStop Color="White"                                  Offset="0.9" />                </LinearGradientBrush>            </Button.Background>        </Button>    </Grid></Window>
Style:<Window x:Class="WpfApp1.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        mc:Ignorable="d"        Title="MainWindow"        Height="450"        Width="800">    <Window.Resources>        <Style TargetType="Button">            <Setter Property="FontSize"                    Value="14" />            <Setter Property="Background">                <Setter.Value>                    <LinearGradientBrush StartPoint="0,0.5"                                         EndPoint="1,0.5">                        <GradientStop Color="Green"                                      Offset="0.0" />                        <GradientStop Color="White"                                      Offset="0.9" />                    </LinearGradientBrush>                </Setter.Value>            </Setter>        </Style>    </Window.Resources>    <Grid>        <Button FontSize="14"                FontWeight="Bold">        </Button>    </Grid></Window>
ControlTemplate:<Window x:Class="WpfApp1.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"        mc:Ignorable="d"        Title="MainWindow"        Height="450"        Width="800">    <Window.Resources>        <Style TargetType="Button">            <Setter Property="Template">                 <!--Template是Button的一个属性值-->                <Setter.Value>                    <!--ControlTemplate继承Template-->                    <ControlTemplate TargetType="Button">                        <Border x:Name="Border1"                                                                 CornerRadius="20"                                BorderThickness="1"                                BorderBrush="Black">                            <Border.Background>                                <LinearGradientBrush StartPoint="0,0.5"                                                     EndPoint="1,0.5">                                    <GradientStop Color="{Binding Background.Color,                                      RelativeSource={RelativeSource TemplatedParent}}"                                                  Offset="0.0" />                                    <GradientStop Color="White"                                                  Offset="0.9" />                                </LinearGradientBrush>                            </Border.Background>                            <ContentPresenter Margin="2"                                              HorizontalAlignment="Center"                                              VerticalAlignment="Center"                                              RecognizesAccessKey="True" />                        </Border>                        <ControlTemplate.Triggers>                             <!--按钮的IsPressed只读属性 当IsPressed为true的时候-->                                                        <Trigger Property="IsPressed"                                     Value="true">                                <!--设置ContentTemplate里的Border1,只能是当前ContentTemplate的Content-->                                <Setter TargetName="Border1"                                        Property="Background">                                    <Setter.Value>                                        <LinearGradientBrush StartPoint="0,0.5"                                                             EndPoint="1,0.5">                                            <!--TemplateParent就是当前修饰的button-->                                            <GradientStop Color="{Binding Background.Color,                                              RelativeSource={RelativeSource TemplatedParent}}"                                                            Offset="0.0" />                                            <GradientStop Color="DarkSlateGray"                                                          Offset="0.9" />                                        </LinearGradientBrush>                                    </Setter.Value>                                </Setter>                            </Trigger>                        </ControlTemplate.Triggers>                    </ControlTemplate>                </Setter.Value>            </Setter>        </Style>    </Window.Resources>    <Grid>        <Button FontSize="14"                FontWeight="Bold" Background="Yellow" >        </Button>    </Grid></Window>
(0)

相关推荐