如何更改MahApps中所有命令按钮的前景色

时间:2014-02-05 12:07:53

标签: wpf xaml button foreground mahapps.metro

有没有办法在MetroWindow中更改按钮前景? 我甚至试图覆盖IronicallyNamedChromelessButtonStyle但前景色仍然相同。

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

4 个答案:

答案 0 :(得分: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的想法和帮助。 如果有人有更好的解决方案,请分享。

答案 1 :(得分:0)

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

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

您可以在Grid的资源中设置它,它只会影响该Grid中的Buttons。

答案 2 :(得分:0)

是的,您可以通过

在appbar_ canvas中应用颜色
Fill="{DynamicResource BlackBrush}"

因此,当您无法控制BlackBrush时,您无法真正应用SolidColorBrush,因为MahApps库中的其他控件将覆盖您的设置。

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

复制您想要更改颜色的appbar图标(可能会创建一个名为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>

然后在你的用户界面中:

<Rectangle Width="20" Height="20">
   <Rectangle.Fill>
       <VisualBrush Stretch="Fill" Visual="{StaticResource my_connecting}"  />
   </Rectangle.Fill>
</Rectangle>

答案 3 :(得分:0)

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

<SolidColorBrush x:Key="MahApps.Brushes.IdealForeground"  Color="WhateverColor" />