wpf - 删除 ToggleButton 烦人的背景鼠标悬停样式
问题描述
我很简单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 何时被选中。(如果您需要更改触发器中的背景,请将背景属性移动到设置器,就像我为内容所做的那样)
希望有帮助...
推荐阅读
- reactjs - 如何填充 React Formik 表单?
- visual-studio-code - VSCode插入“不间断空格”而不是常规空格
- python - Python - 输出不如预期
- javascript - Angular,Ionic:带有 MAP 的 RxJs Pipe 在 Windows 中不返回值,但在与 httpclient 一起使用时在 mac 中工作
- python - Python 的 psycopg2 可以使用受密码保护的客户端证书和密钥吗?
- c# - 如何从 mvc 中的异步方法重定向到页面
- c++ - 我不知道如何从 cpp 中的一个变量同时返回两个值
- python - 具有未知形状的 Dask 数组
- java - 在 java 类中的 oracle sql 和 java 变量之间进行计算
- java - Spring Boot 启动异常