【问题标题】:XAML resouce dictionary - unable to apply default styleXAML 资源字典 - 无法应用默认样式
【发布时间】:2017-04-07 12:50:50
【问题描述】:

我目前正面临一个非常奇怪的情况。

我有一个 WPF 应用程序,其中 App.xaml 中有以下行:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary>
                <local:AppBootstrapper x:Key="bootstrapper" />
            </ResourceDictionary>
            <ResourceDictionary Source="./Styles/MyTheme.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后我在 MyTheme.xaml 中有一些字典:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="./UserControlStyles.xaml"/>
    <ResourceDictionary Source="./WizardStyle.xaml"/>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Blue.xaml" />

    <ResourceDictionary Source="./DataGridStyles.xaml"/>
    <ResourceDictionary Source="./TreeViewStyles.xaml"/>
    <ResourceDictionary Source="./ToggleButtonStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>

最后有一个 DataGrid,我想默认应用到我的应用程序的所有 DataGrid(在 DataGridStyles.xaml 中):

<ResourceDictionary>
        <Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MaterialDesignDataGrid}">
            <Setter Property="AutoGenerateColumns" Value="False" />
            <Setter Property="CanUserAddRows" Value="False" />
            <Setter Property="CanUserDeleteRows" Value="False" />
            <Setter Property="SelectionMode" Value="Single" />
        </Style>
    </ResourceDictionary>

DataGrid 样式由于某种原因没有应用,但如果我将它直接放在 MyTheme.xaml 中,它就可以工作:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="./UserControlStyles.xaml"/>
    <ResourceDictionary Source="./WizardStyle.xaml"/>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Dark.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.Blue.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Blue.xaml" />

    <ResourceDictionary Source="./DataGridStyles.xaml"/>
    <ResourceDictionary Source="./TreeViewStyles.xaml"/>
    <ResourceDictionary Source="./ToggleButtonStyles.xaml"/>

    <ResourceDictionary>
        <Style TargetType="{x:Type DataGrid}" BasedOn="{StaticResource MaterialDesignDataGrid}">
            <Setter Property="AutoGenerateColumns" Value="False" />
            <Setter Property="CanUserAddRows" Value="False" />
            <Setter Property="CanUserDeleteRows" Value="False" />
            <Setter Property="SelectionMode" Value="Single" />
        </Style>
    </ResourceDictionary>
</ResourceDictionary.MergedDictionaries>

请注意,MaterialDesignDataGrid 是在 MaterialDesignTheme.Defaults.xaml 中定义的。

这是预期的行为吗?我做错了吗?

非常感谢您的宝贵时间。

【问题讨论】:

  • 你试过用DynamicResource代替StaticResource吗?
  • 如果你的意思是&lt;Style TargetType="{x:Type DataGrid}" BasedOn="{DynamicResource MaterialDesignDataGrid}"&gt;,是的,我做到了,但它不起作用。

标签: c# wpf xaml


【解决方案1】:

为 DataGridStyles.xaml 的构建操作尝试不同的设置。我认为如果您将其设置为 Page,它应该可以工作。

【讨论】:

  • Connell,这可能是与 ResourceDictionaries 合并在一起的顺序有关的问题。
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多