使用 MahApps,我们如何更改 Expander 的 ToggleButton 的 MouseOver 样式?

Using MahApps, how can we change MouseOver style of Expander's ToggleButton?

我的 WPF 使用的是 MahApps metro 框架。如下图 2 所示,将鼠标悬停在应用程序的任何 Expander 控件的 header 上会使 header 的 ToggleButton 几乎不可见。

问题:如何让这个切换按钮更加突出?

XAML:

<!-- ... -->
<Expander Header="Test expander" Width="145" Padding="0">
     <StackPanel>
          <Button Content="Button 1" Foreground="White"/>
          <Button Content="Button 2" Foreground="White"/>
     </StackPanel>
</Expander>
<!-- ... -->

鼠标悬停在 Header:

上时显示上述扩展器

鼠标悬停在 Header:

上时显示上述扩展器

如你所见,左边的ToggleButton几乎看不见。

Expander 控件有 4 种不同的样式,分别用于上、下、左和右方向。它们都使用 triggers in the repective control templates.

以相同的方式定义 Mouse Over 状态
<ControlTemplate.Triggers>
    <!-- ... -->
    <Trigger Property="IsMouseOver" Value="true">
        <Setter TargetName="Arrow" Property="Stroke" Value="{DynamicResource MahApps.Brushes.Gray2}" />
        <Setter TargetName="Circle" Property="Stroke" Value="{DynamicResource MahApps.Brushes.Gray2}" />
    </Trigger>
    <!-- ... -->
</ControlTemplate.Triggers>

如您所见,setter 直接使用 DynamicResource 分配 MahApps.Brushes.Gray2。它们未绑定到任何 属性 或以样式设置,因此几乎没有选项可以更改它,例如:

  • 通过复制默认样式并调整 鼠标悬停MahApps.Styles.ToggleButton.ExpanderHeader.Down(以及任何面向不同的 Expander 创建自定义样式触发器。

  • 用不同的笔刷覆盖 MahApps.Brushes.Gray2 或创建自定义主题。

    <SolidColorBrush x:Key="MahApps.Brushes.Gray2" Color="Black"/>
    

    您可以在应用程序资源字典中覆盖此笔刷。但是,这不仅会影响 Expander 控件,还会影响使用此画笔的 所有 控件。如果您在 Expander 资源中重新定义画笔,它将同样适用于其所有子项。