移除 ToggleButton 烦人的背景鼠标悬停样式
Remove ToggleButton annoying background Mouse over style
我有简单的 ToggleButton
,当 IsChecked
我只想更改文本。
我想要所有其他属性,如 border
和 background
将是 Transparent
但似乎我仍然有这个 background
style
:
<ToggleButton x:Name="changeButBorderedBlinky" Content="EDIT" Width="40" Height="40" Background="Transparent">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Content" Value="Done"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
一件经常令人讨厌的事情是默认 WPF 控件的某些视觉方面以某种方式编码,因此它们不可配置。 MouseOver 背景就是一个示例(滚动条大小是另一个...grrr!!!)。不过,您可以通过为 ToggleButton 定义自己的模板并消除该 MouseOver 触发器来解决此问题。这是一个简单的例子:
<ToggleButton x:Name="changeButBorderedBlinky" Width="40" Height="40" Background="Transparent">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content" Value="EDIT"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter x:Name="contentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
Focusable="False"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Content" Value="Done"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
此外,为了在触发器中更改 属性,它必须在样式中设置,而不是直接设置。这就是为什么您的内容不会在您的 MouseOver 触发器中更改。如果您删除它的 属性 设置并且
使用 Setter 将其添加到样式中,它将允许触发器更改它。
所有这一切的一个缺点是它会覆盖所有默认模板触发器,因此除非您也为 "IsChecked" 添加触发器,否则您将不会再看到 ToggleButton 何时被选中。 (如果您需要更改触发器中的背景,请将背景 属性 移动到 Setter,就像我对内容所做的那样)
希望对您有所帮助...
我有简单的 ToggleButton
,当 IsChecked
我只想更改文本。
我想要所有其他属性,如 border
和 background
将是 Transparent
但似乎我仍然有这个 background
style
:
<ToggleButton x:Name="changeButBorderedBlinky" Content="EDIT" Width="40" Height="40" Background="Transparent">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Content" Value="Done"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
一件经常令人讨厌的事情是默认 WPF 控件的某些视觉方面以某种方式编码,因此它们不可配置。 MouseOver 背景就是一个示例(滚动条大小是另一个...grrr!!!)。不过,您可以通过为 ToggleButton 定义自己的模板并消除该 MouseOver 触发器来解决此问题。这是一个简单的例子:
<ToggleButton x:Name="changeButBorderedBlinky" Width="40" Height="40" Background="Transparent">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content" Value="EDIT"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="border"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
SnapsToDevicePixels="True">
<ContentPresenter x:Name="contentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
Focusable="False"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Content" Value="Done"/>
<Setter Property="FontWeight" Value="Bold"/>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
此外,为了在触发器中更改 属性,它必须在样式中设置,而不是直接设置。这就是为什么您的内容不会在您的 MouseOver 触发器中更改。如果您删除它的 属性 设置并且 使用 Setter 将其添加到样式中,它将允许触发器更改它。
所有这一切的一个缺点是它会覆盖所有默认模板触发器,因此除非您也为 "IsChecked" 添加触发器,否则您将不会再看到 ToggleButton 何时被选中。 (如果您需要更改触发器中的背景,请将背景 属性 移动到 Setter,就像我对内容所做的那样)
希望对您有所帮助...