我很简单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>
Run Code Online (Sandbox Code Playgroud)
通常令人讨厌的一件事是默认 WPF 控件的某些视觉方面以某种方式编码,因此它们不可配置。鼠标悬停背景就是一个例子(滚动条大小是另一个...... 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>
Run Code Online (Sandbox Code Playgroud)
此外,为了更改触发器中的属性,它必须在样式中设置,而不是直接设置。这就是为什么您的内容不会在您的鼠标悬停触发器中更改的原因。如果您删除它的属性设置并使用 Setter 将其添加到样式中,它将允许触发器更改它。
所有这一切的一个缺点是它会覆盖所有默认模板触发器,因此除非您也为“IsChecked”添加触发器,否则您将看不到 ToggleButton 何时被选中。(如果您需要更改触发器中的背景,请将背景属性移动到 Setter,就像我为 Content 所做的那样)
希望有帮助...