我一直在搜索程序集是否有可能在运行时从另一个程序集更改ResourceDictionary值。到目前为止,我一无所获。 这里的交易。我有一个独立工作的UserControl,因此它可以适合不同的项目。我的UserControl有自己的Resources.xaml(编译为资源)。 我有第二个程序集,它用作此用户控件的设置工具。它基本上只读取UserControl Resources.xaml(这很好用),然后替换Resources.Xaml的值。麻烦的是,我无法更改资源值。从外部程序集编辑ResourceDictionary
下面是我用我的设置工具来读取资源字典代码:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Control;component/Configuration/Resources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
要改变这种价值观,我想是这样:
this.Resources.MergedDictionaries.First()["IsZoomable"] = false;
它认识到资源,但不会改变它。是否有可能在运行时更改另一个程序集字典的值,或者是否需要创建可由两个程序集共享的外部字典?
编辑:
用户控件包含Resources.xaml。我定义的资源,这种控制是这样的:
<UserControl.Resources> <ResourceDictionary Source="Configuration/Resources.xaml"/> </UserControl.Resources>
设置工具可接取这个资源,但我不能改变他们。当我这样做时,用户控件仍然读取旧值。资源在设置工具定义的,像这样:
<Window.Resources> <ResourceDictionary Source="pack://application:,,,/Control;component/Configuration/Resources.xaml"/> </Window.Resources>
当你说“不会改变”,你的意思是它抛出一个错误,或者只是从来没有表现的变化?如果它抛出,那么你的资源可能被冻结,如果它没有显示,那么使用DynamicResource而不是StaticResource。 – GazTheDestroyer
嗨。感谢您的评论。没有错误被抛出。这些变化从未表现出来。让我试试DynamicResource。 –