我有简单的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>
答案 0 :(得分:1)
通常令人讨厌的一件事是,默认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。 (并且,如果您需要在触发器中更改背景,请像我对内容所做的那样,将背景属性移至设置器)
希望有帮助...