【问题标题】:Setting WindowButtonCommands styles in Mahapps.Metro在 Mahapps.Metro 中设置 WindowButtonCommands 样式
【发布时间】:2016-04-06 09:54:58
【问题描述】:

我想为我的 WPF 应用程序更改 Min、Max 和 Close 按钮​​的样式。

我正在使用Mahapps.Metro,并且我已经成功地实现了我想要的结果,但仅在MetroWindow 类中使用过时的WindowMinButtonStyleWindowMaxButtonStyleWindowCloseButtonStyle 属性。例如,WindowMinButtonStyle 属性上的过时消息如下:

此属性将在下一版本中删除。您应该在 WindowButtonCommands 中使用 LightMinButtonStyle 或 DarkMinButtonStyle 来覆盖样式。

问题是我不知道具体该怎么做。 MetroWindow 类有一个名为 WindowButtonCommands 的字段,但它是 internal,所以这似乎是错误的树。我对 WPF 还很陌生,他们网站上的指南中没有关于如何做到这一点的信息,所以我很迷茫。我希望有人可以为我提供一个简短的代码示例,为我指明正确的方向。

编辑 - 这是产生警告的 XAML:

<controls:MetroWindow x:Class="Project.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"
        WindowMinButtonStyle="{DynamicResource DarkWindowButtonStyle}"
        WindowMaxButtonStyle="{DynamicResource DarkWindowButtonStyle}"
        WindowCloseButtonStyle="{DynamicResource DarkWindowCloseButtonStyle}">
    <Grid>
    </Grid>
</controls:MetroWindow>

我还应该提到我正在使用 Mahapps.Metro 的新 v1.2.0,但我在以前的版本中遇到了同样的问题。 具有Obsolete 属性的 Mahapps.Metro 源代码:https://github.com/MahApps/MahApps.Metro/blob/develop/MahApps.Metro/Controls/MetroWindow.cs#L88-L93

【问题讨论】:

  • 我更改了WindowMinButtonStyle 并没有收到任何警告。显示您的 XAML。
  • @jstreet 感谢您对此进行调查,我使用 XAML 和更多信息编辑了我的问题。
  • 我使用的是 1.1.3.0 版本.....请同时显示您的DarkWindowButtonStyle
  • @jstreet 我看不出样式的相关性,完全空白的样式会产生相同的警告。问题是属性被标记为过时,显然应该有一种不同的方式来分配样式。
  • 尝试使用LightMinButtonStyleDarkMinButtonStyle,具体取决于您使用的Accent。这些在 1.1.3.0 版本中不可用,但应该在某个时间点替换 WindowMinButtonStyle,可能在 1.2.0 版本中

标签: c# wpf xaml titlebar mahapps.metro


【解决方案1】:

基于crumbl3dchanges,一个简短的如何...

现在有两种样式(Light、Dark),它们将基于OverrideDefaultWindowCommandsBrush 属性(可在MetroWindow 获得)和亮度(默认为Light 样式)使用。

所以,把这些放在你的App.xaml(或其他地方)

<Style x:Key="CustomLightMetroWindowButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource LightMetroWindowButtonStyle}">
    <Setter Property="Foreground" Value="Chocolate" />
</Style>

<Style x:Key="CustomDarkMetroWindowButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DarkMetroWindowButtonStyle}">
    <Setter Property="Foreground" Value="Crimson" />
</Style>

<Style TargetType="{x:Type controls:WindowButtonCommands}" BasedOn="{StaticResource {x:Type controls:WindowButtonCommands}}">
    <Setter Property="LightMinButtonStyle" Value="{StaticResource CustomLightMetroWindowButtonStyle}" />
    <Setter Property="LightMaxButtonStyle" Value="{StaticResource CustomLightMetroWindowButtonStyle}" />
    <Setter Property="LightCloseButtonStyle" Value="{StaticResource CustomLightMetroWindowButtonStyle}" />
    <Setter Property="DarkMinButtonStyle" Value="{StaticResource CustomDarkMetroWindowButtonStyle}" />
    <Setter Property="DarkMaxButtonStyle" Value="{StaticResource CustomDarkMetroWindowButtonStyle}" />
    <Setter Property="DarkCloseButtonStyle" Value="{StaticResource CustomDarkMetroWindowButtonStyle}" />
</Style>

编辑

如果您只想在一个窗口中使用它,那么您可以使用键创建一个样式并在此窗口中使用它,如下所示:

<controls:MetroWindow.WindowButtonCommands>
    <controls:WindowButtonCommands Style="{DynamicResource CustomWindowButtonCommandsStyleLocatedtInAppXaml}" />
</controls:MetroWindow.WindowButtonCommands>

位于 App.xaml 中的样式

<Style x:Key="CustomWindowButtonCommandsStyleLocatedtInAppXaml" TargetType="{x:Type controls:WindowButtonCommands}" BasedOn="{StaticResource {x:Type controls:WindowButtonCommands}}">
    <Setter Property="LightMinButtonStyle" Value="{StaticResource CustomLightMetroWindowButtonStyle}" />
    <Setter Property="LightMaxButtonStyle" Value="{StaticResource CustomLightMetroWindowButtonStyle}" />
    <Setter Property="LightCloseButtonStyle" Value="{StaticResource CustomLightMetroWindowButtonStyle}" />
    <Setter Property="DarkMinButtonStyle" Value="{StaticResource CustomDarkMetroWindowButtonStyle}" />
    <Setter Property="DarkMaxButtonStyle" Value="{StaticResource CustomDarkMetroWindowButtonStyle}" />
    <Setter Property="DarkCloseButtonStyle" Value="{StaticResource CustomDarkMetroWindowButtonStyle}" />
</Style>

希望这会有所帮助。

【讨论】:

  • 如果我只想为一个窗口而不是所有窗口更改关闭按钮怎么办?
  • @xmedeko 您可以创建另一个 WindowButtonCommands 样式并给它一个键。然后你可以在这个窗口使用它...
  • 到目前为止,Sytle 基础已经过时。新:BasedOn="{StaticResource MahApps.Styles.Button.MetroWindow.Dark}"&gt;。不得不做一些挖掘。
猜你喜欢
  • 2013-03-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多