有没有办法在MetroWindow中更改按钮前景? 我甚至试图覆盖IronicallyNamedChromelessButtonStyle但前景色仍然相同。
编辑: 按钮位于窗口栏中(例如,关闭,最小化,最大化)。
答案 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" />