移除 ToggleButton 烦人的背景鼠标悬停样式

Remove ToggleButton annoying background Mouse over style

我有简单的 ToggleButton,当 IsChecked 我只想更改文本。 我想要所有其他属性,如 borderbackground 将是 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,就像我对内容所做的那样)

希望对您有所帮助...