7

有没有办法改变 MetroWindow 中的按钮前景?我什至尝试覆盖 IronicallyNamedChromelessButtonStyle 但前景色仍然相同。

编辑:按钮位于窗口栏中(例如关闭、最小化、最大化)。

4

4 回答 4

12

在深入研究 MahApps 代码后...这是负责按钮的源代码: https ://github.com/MahApps/MahApps.Metro/blob/master/MahApps.Metro/Themes/MetroWindow.xaml 如果你仔细看,你会注意到每个样式都有用硬编码的“白色”覆盖样式前景的触发器:

<Style.Triggers>
        <DataTrigger Binding="{Binding ShowTitleBar, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Controls:MetroWindow}}}"
                     Value="True">
            <Setter Property="Foreground"
                    Value="White" />
        </DataTrigger>
        <DataTrigger Binding="{Binding ShowTitleBar, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Controls:MetroWindow}}}"
                     Value="False">
            <Setter Property="Background"
                    Value="Transparent" />
        </DataTrigger>
    </Style.Triggers>

我的解决方案是覆盖所有必要的样式触发器:

<Style TargetType="{x:Type MahControls:WindowButtonCommands}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ShowTitleBar, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MahControls:MetroWindow}}}"
                     Value="True">
            <Setter Property="Foreground"
                    Value="{StaticResource IdealForegroundColorBrush}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

希望这对我的任何人都有帮助。特别感谢 @Rui 和 @Sankarann 的想法和帮助。如果有人有更好的解决方案,请分享。

于 2014-02-05T16:00:30.217 回答
0

您可以使用隐式样式。隐式样式是没有“键”的样式,例如,如果您在 Application.Resources 中添加此样式,它将影响应用程序中的所有按钮:

<Application.Resources>
  <Style TargetType="Button">
    <Setter Property="Foreground" Value="Blue"/>
  </Style>
</Application.Resources>

例如,您可以将其设置在网格的资源中,它只会影响该网格内的按钮。

于 2014-02-05T12:14:24.570 回答
0

是的,你的权利通过 appbar_canvas 应用颜色

Fill="{DynamicResource BlackBrush}"

因此,由于您无法控制 BlackBrush,因此您无法真正对其应用 SolidColorBrush,因为 MahApps 库中的其他一些控件会覆盖您的设置。

您需要将 NuGet 指向 Loose 资源文件(这样您就可以在本地使用 Icons.xaml 文件)

复制要更改颜色的应用栏图标(可能创建一个名为 MyIcons.xaml 的资源字典并将它们保存在其中,将 MyIcons.xaml 添加到您的 App.xaml MergedDictionaries)

然后在 MyIcons.xaml 中定义您的图标(也使用新颜色):

<SolidColorBrush x:Key="IconBrushOrange" Color="Orange" />

<Canvas  x:Key="my_connecting" All other fields...>
    <Path Stretch="Fill" Fill="{StaticResource IconBrushOrange}" All other fields....  />
</Canvas>

然后在您的 UI 中:

<Rectangle Width="20" Height="20">
   <Rectangle.Fill>
       <VisualBrush Stretch="Fill" Visual="{StaticResource my_connecting}"  />
   </Rectangle.Fill>
</Rectangle>
于 2014-02-07T18:16:04.257 回答
0

只需在窗口资源中重新定义 Brush 即可:

<SolidColorBrush x:Key="MahApps.Brushes.IdealForeground"  Color="WhateverColor" />
于 2021-01-30T13:56:56.570 回答