我一直在搜索程序集是否有可能在运行时从另一个程序集更改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>
答案 0 :(得分:1)
是的,您可以在运行时更改资源的值。
由于您已合并字典,因此可以更改此值:
this.Resources["IsZoomable"]=false;
确保资源键与实际键匹配 如果您已在app.xaml中合并了字典,则可以使用:
Application.current.Resources["IsZoomable"]=false;