wpf - 有没有办法让 DynamicResource 对于 ResourceDictionary 中的 Freezable 是动态的?

标签 wpf resourcedictionary brush dynamicresource freezable

我在 Brushes.xaml 中有这个:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:controls="clr-namespace:SkinBox.Controls">
    <SolidColorBrush x:Key="{x:Static controls:Keys.BackgroundBrushKey}"
                     Color="{DynamicResource {x:Static controls:Keys.BackgroundColorKey}}" />
</ResourceDictionary>

并在 Generic.xaml 中像这样使用它:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:SkinBox.Controls"
                    xmlns:system="clr-namespace:System;assembly=System">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/SkinBox.Controls;component/Themes/Skins/Blue.xaml" />
        <ResourceDictionary Source="pack://application:,,,/SkinBox.Controls;component/Themes/Brushes.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

问题是 wpf 卡住了画笔,所以 DynamicResource 没有效果。

有没有一种干净的方法来解决这个问题?我只能想到讨厌的黑客。

最佳答案

解决方法的想法:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:controls="clr-namespace:SkinBox.Controls">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/SkinBox.Controls;component/Themes/Skins/Yellow.Colors.xaml" />
        <ResourceDictionary Source="pack://application:,,,/SkinBox.Controls;component/Themes/Brushes.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

这仍然没有提供真正的动态资源,但它会重新应用画笔,以便它们在应用皮肤时更新。

无需在每个皮肤中复制画笔。

关于wpf - 有没有办法让 DynamicResource 对于 ResourceDictionary 中的 Freezable 是动态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33242667/

相关文章:

c# - 如何在屏幕外渲染图表(来自 wpf 工具包)控件?

c# - WPF-C# : This element is not currently associated with any context

javascript - D3刷分组条形图

c++ - GDI+ 在全局创建新的 SolidBrush

WPF 图标规范以支持 Windows 7 并向后兼容

wpf - 从左到右流动的颜色变化动画

wpf - 如何使用 MultiBinding 在上下文菜单中隐藏分隔符?

c# - 如何加载外部 XAML ResourceDictionary

wpf - 在运行时从具有相同名称的程序集中加载 ResourceDictionary 资源

javascript - d3 - 笔刷/平移缩放 - 禁用上部 x 轴上的平移