从外部程序集编辑ResourceDictionary

时间:2015-08-21 09:36:03

标签: wpf xaml resourcedictionary

我一直在搜索程序集是否有可能在运行时从另一个程序集更改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>
    

1 个答案:

答案 0 :(得分:1)


是的,您可以在运行时更改资源的值。 由于您已合并字典,因此可以更改此值:

this.Resources["IsZoomable"]=false;

确保资源键与实际键匹配 如果您已在app.xaml中合并了字典,则可以使用:

Application.current.Resources["IsZoomable"]=false;