资源字典中的Metro Styles

时间:2016-02-10 14:20:31

标签: c# wpf xaml mahapps.metro

我正在尝试使用Mahapps Metro设置我的WPF应用程序。我在App.xaml的MergedDictionary中添加了所有必需的.xaml文件。如果我在视图文件中写下以下内容,

<Button DockPanel.Dock="Left" VerticalAlignment="Top" Style="{DynamicResource SquareButtonStyle}"/>

它有效,即按钮的样式为SquareButtonStyle。但是,如果我在我自己的资源字典中添加以下内容,

<Style TargetType="Button">
    <Setter Property="Style" Value="{DynamicResource SquareButtonStyle}"/>
</Style>

我收到错误消息,

  

设置属性   “System.Windows.ResourceDictionary.DeferrableContent”导致了一个问题   异常。

(我对德语错误信息的翻译)。那么我如何设置所有按钮的样式,例如SquareButtonStyle,而不必单独在每个按钮上执行此操作?

编辑:这是我的app.xaml(最后一个字典,ResourceDic.xaml,是我自己的上面代码所在的字典):

<Application xmlns:local="clr-namespace:MGM8" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <local:MGM8_BootStrapper p7:Key="bootstrapper" xmlns:p7="http://schemas.microsoft.com/winfx/2006/xaml" />
                </ResourceDictionary>
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
            <ResourceDictionary Source="ResourceDic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

1 个答案:

答案 0 :(得分:2)

Style属性无法在任何元素的Style内设置。

只需在根级别声明您的样式(根资源字典或App.xmal资源)。只需使用TargetType Button创建样式,不要给它任何关键字。它将应用于应用程序中的所有按钮。

代表:

<Style TargetType="Button" BasedOn="{StaticResource SquareButtonStyle}" >
        <Setter Property="Height" Value="50"/>
        <Setter Property="BorderThickness" Value="2,1" />
    </Style>

所以上面是为所有按钮的应用程序扩展SquareButtonStyle(仅当在根级别定义时)。

<强>更新

您必须在自己的资源词典中使用以下内容:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="SquareButtonStyle dictionary"/>
</ResourceDictionary.MergedDictionaries>

然后,只有您可以在ResourceDictionary中基于SquareButtonStyle创建按钮样式。