WPF自定义模板--Button

26 篇文章 0 订阅

属性:

  • TemplateBinding:用于在ControlTemplate中绑定到控件的属性,例如Background、BorderBrush等。
  • TargetType:指定该模板应用于哪种控件类型。在这个例子中,是Button。

标准的控件模板代码:

<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual1}"/>
    <Setter Property="Background" Value="{StaticResource Button.Static.Background1}"/>
    <Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border1}"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10" SnapsToDevicePixels="true">
                    <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsDefaulted" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Background" TargetName="border" Value="Orange"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="red"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background1}"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border1}"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background1}"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border1}"/>
                        <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground1}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

自定义Button的外观:

<ControlTemplate TargetType="Button">
    <Border Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}"
            CornerRadius="10">
        <ContentPresenter HorizontalAlignment="Center" 
                          VerticalAlignment="Center" 
                          Content="{TemplateBinding Content}" />
    </Border>
</ControlTemplate>

这里我们通过设置CornerRadius属性来使按钮的边框变圆角。

使用Triggers和Animations

<ControlTemplate TargetType="Button">
    <Border x:Name="border" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}"
            CornerRadius="10">
        <ContentPresenter HorizontalAlignment="Center" 
                          VerticalAlignment="Center" 
                          Content="{TemplateBinding Content}" />
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="border" Property="Background" Value="LightBlue" />
        </Trigger>
        <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="border" Property="Background" Value="DarkBlue" />
            <Setter TargetName="border" Property="RenderTransform">
                <Setter.Value>
                    <ScaleTransform ScaleX="0.95" ScaleY="0.95" />
                </Setter.Value>
            </Setter>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

这里我们通过触发器改变按钮在鼠标悬停和按下时的背景颜色,并在按下时缩小按钮的尺寸

鼠标悬停:

鼠标按下:

模板样式与资源

<Window.Resources>
    <Style x:Key="CustomButtonStyle" TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Background="{TemplateBinding Background}" 
                            BorderBrush="{TemplateBinding BorderBrush}" 
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <ContentPresenter HorizontalAlignment="Center" 
                                          VerticalAlignment="Center" 
                                          Content="{TemplateBinding Content}" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid>
    <Button Style="{StaticResource CustomButtonStyle}" 
            Width="100" Height="50" Content="Styled Button" />
</Grid>

我们将按钮定义为样式,可以多个按钮使用

也可以根据 TemplateBinding 进行传值,绑定数据 和 属性值

在Blend中创建WPF自定义Button控件,可以按照以下步骤进行: 1. 打开Blend,创建一个新的WPF项目。 2. 在“项目”面板中,右键单击“控件”文件夹,选择“添加”->“新建项”。 3. 在“添加新项”对话框中,选择“WPF”->“Custom Control”,设置名称为“CustomButton”并选择位置,点击“添加”按钮。 4. Blend会自动生成一个名为“CustomButton”的自定义控件的类文件和一个默认的控件模板文件。 5. 双击控件模板文件,进入“编辑模板”模式。在这里,你可以自由地编辑控件的外观和布局。 6. 在“对象和时间”面板中,可以选择控件的外观和行为。例如,你可以添加按钮、文本框等控件,设置它们的属性和事件处理程序。 7. 在控件模板中,找到名为“PART_Button”控件的模板,这是自定义控件中的按钮。你可以编辑它的外观和行为,以实现自定义Button控件的功能和样式。 8. 在编辑完成后,保存模板文件并退出“编辑模板”模式。 9. 在CustomButton类中,添加自定义属性和事件处理程序,以实现自定义Button控件的功能。 10. 在应用程序中,使用自定义Button控件,只需要在XAML中添加一个CustomButton标记,然后设置它的属性和事件处理程序即可。 以上就是在Blend中创建WPF自定义Button控件的基本步骤。需要注意的是,在创建控件时,应该考虑控件的可重用性和灵活性,以便在不同的场景中使用。同时,应该设计好控件的外观和行为,以便用户可以方便地使用和定制控件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值