WPF - 重新定义主题资源?

时间:2013-09-14 13:41:07

标签: wpf themes staticresource redefine

我正在使用我的项目引用的其中一个dll中提供的主题,如下所示:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/SomeNameSpace;component/Themes/SomeTheme.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

我想修改这个主题中的刷子。如果我知道画笔的'key'(通过使用snoop找到),是否可以将其重新定义为具有不同的颜色?

我尝试了以下内容,但没有效果。

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/SomeNameSpace;component/Themes/SomeTheme.xaml"/>
            </ResourceDictionary.MergedDictionaries>

            <LinearGradientBrush x:Key="keyNameFoundUsingSnoop">
                ...new value
            </LinearGradientBrush>
        </ResourceDictionary>
    </Application.Resources>

我想知道这种类型的东西是否可行,因为当你没有重新编译的xaml,或者你想动态修改键值时。

编辑:我无法在XAML中使用它,但设法在代码中获得类似内容:

void ReplaceResource(ResourceDictionary _res, object _key, object _replacement)
    {
        foreach (var i in _res.Keys)
        {
            if (object.Equals(i, _key))
            {
                _res[i] = _replacement;
            }
        }

        foreach (var i in _res.MergedDictionaries)
        {
            ReplaceResource(i, _key, _replacement);
        }
    }

(当我找到密钥时我不会破坏,就像我的情况一样,它在多个词典中)

用法:

var lightGray = new SolidColorBrush(Color.FromArgb(50, 255, 255, 255));
ReplaceResource(Application.Current.Resources, "KeyToFind", lightGray);

0 个答案:

没有答案