代码之家  ›  专栏  ›  技术社区  ›  falukky

删除切换按钮烦人的背景鼠标悬停样式

  •  0
  • falukky  · 技术社区  · 8 年前

    我有简单的 ToggleButton 什么时候 IsChecked 我只想更改文本。 我想要所有其他的财产 border background Transparent 但我好像还有这个 背景 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>
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Jeff R.    8 年前

    一件经常令人恼火的事情是,默认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>
    

    此外,要更改触发器中的属性,必须以样式设置,而不是直接设置。这就是为什么鼠标悬停触发器中的内容不会发生变化的原因。如果删除它的属性设置,并且 将它与setter一起添加到样式中,它将允许触发器更改它。

    这样做的一个缺点是,它会覆盖所有默认模板触发器,这样您就不会再看到何时选中ToggleButton,除非您也为“IsChecked”添加触发器。(如果需要更改触发器中的背景,请将background属性移动到setter,就像我对内容所做的那样)

    希望有帮助…