自定义按钮而不添加边框或其他内容

基本的

我有一个 WPF 按钮

<Button Style="{StaticResource BrandedButton}">Continue</Button>

它目前的样式如下:

<Style x:Key="BrandedButton" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="{StaticResource LowlightBrush}"/>
    <Setter Property="Foreground" Value="White"/>
    <Setter Property="FontFamily" Value="Open Sans Light"/>
    <Setter Property="FontSize" Value="35"/>
    <Setter Property="Padding" Value="50,10"/>
</Style>

在此处输入图片说明

现在,我想控制悬停/按下/等的颜色(而不是其他任何东西),所以我添加了另一个设置器

    <Setter Property="Template" Value="{StaticResource BrandedButtonTemplate}"/>

这指向这个 ControlTemplate。我只看过改变按钮结构的例子,例如通过添加边框:

<ControlTemplate x:Key="BrandedButtonTemplate" TargetType="Button">
    <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="0">
        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
        </Trigger>
        <Trigger Property="IsPressed" Value="true">
            <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Background" Value="{StaticResource HighlightBrush}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

但这会破坏之前应用的布局:

在此处输入图片说明

相反,如果我只包含ContentPresenter和省略 wrapping Border,按钮就会完全消失。

如何在不更改任何其他内容的情况下更改悬停和按下颜色?对于应该是微不足道的任务,最小/最轻的实现是什么?

克莱门斯

您的 ControlTemplate 会忽略 Button 的Padding属性。

添加 ContentPresenter 的 TemplateBinding Margin

<ControlTemplate x:Key="BrandedButtonTemplate" TargetType="Button">
    <Border Background="{TemplateBinding Background}" BorderThickness="0">
        <ContentPresenter
            Margin="{TemplateBinding Padding}"
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        ...
    </ControlTemplate.Triggers>
</ControlTemplate>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

向JOptionPane添加其他自定义按钮

在jqGrid上添加自定义按钮以打开其他URL

如何用自定义单词替换其他内容

自定义DateTimePicker的边框和按钮

向UISegmentControl添加自定义边框

其他功能区按钮的Excel自定义功能区按钮调用子例程

更改css按钮边框宽度而不更改其他效果

如何自定义材料组件的日期范围选择器的颜色和其他内容?

如何在调试时打印Swift结构的自定义描述,而没有其他内容?

展开DataFrame的列,并用自定义值填充其他列的内容

Swift 5和Storyboard UITableViewDelegate不显示自定义或任何其他样式内容

如何向自定义的Orchard内容部分引入其他自动增量或Guid字段?

在actionSheetController中添加自定义内容

WooCommerce结帐中的其他自定义下订单按钮

自定义单选按钮,与其他标签标签冲突

检测到其他地方的点击,然后从自定义调色板点击按钮

在Go的其他结构中使用自定义结构作为类型不构建

为什么我的类的自定义成员变量在其他类中不更新?

电源双 - 自定义视觉 - 矩阵选择不更新其他视觉

在 Jvectormap 中添加自定义按钮

如何添加自定义按钮状态

使用AsyncDisplayKit添加自定义按钮

Laravel不添加自定义标题

使自定义按钮的高度在圆的边框中相同:

“自定义”按钮中的WPF绑定边框颜色

自定义 UIButton 类 - 渐变离开按钮边框

具有不连续底部边框的自定义UITextfield

TYPO3 这是否可以从后端删除特定自定义布局的添加内容按钮

将自定义操作添加到ApiPlatform文档中的其他组