WPF资源词典和样式

本文关键字:样式 资源 WPF | 更新日期: 2023-09-27 18:16:33

大家好,

我在WPF有一个问题。我有2个(或更多在不久的将来)资源词典,其中一个包含所有的控制模板和另一个包含图标和SolidColorBrushes。由于第一个ResourceDictionary为每个控件包含2个样式,我想制作另一个包含颜色和图标的字典,以便在对话框中使用它们,从而允许删除冗余的样式。我想总是使用基本字典和所需的颜色字典,但这里有一个问题:

模板不能访问其他字典中的颜色。我尝试了以下方法:

方法1:在窗口

中引用两个字典
<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="BaseUIStyle.xaml"/>
            <ResourceDictionary Source="UIStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

方法二:在窗口中引用颜色字典,在颜色字典中建立对模板字典的引用。最初的设置是相同的,但反过来(window -> base -> color)

//Window XAML    
<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="UIStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
//Color XAML
<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="BaseUIStyle.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

臭名昭著的。net 4 Bug,许多人在设计他们的窗口样式时遇到的,在这里不是IMO,因为应用程序将。net 4.5作为目标框架,甚至第二个方法也不会深入(如果我在搜索3级或更深层时理解正确,错误就会发生)。

感谢您的帮助

WPF资源词典和样式

将资源字典移动到App.xaml中,App.xaml中引用的任何内容都将对应用程序中的任何文件可用。

请记住,资源是可用的,他们被添加到其中的任何东西,所以在你上面的例子中,任何添加到你的窗口将有可用的资源,IDE可能不会自动完成它们,但如果它们在App.xaml中,它会。

我也没有看到颜色。Xaml被引用到任何地方

取决于你需要的BaseUiStyle有多顶层。xaml和uistyle。你可以在App.xaml.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Color.xaml"/>
            <ResourceDictionary Source="BaseUIStyle.xaml"/>
            <ResourceDictionary Source="UIStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>