从外部程序集编辑 ResourceDictionary
Edit ResourceDictionary from an external assembly
我一直在寻找一个程序集是否可以在运行时更改另一个程序集的 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>
是的,您可以在运行时更改资源的值。
由于您已经合并了字典,您可以像这样更改值:
this.Resources["IsZoomable"]=false;
确保资源键与实际键匹配。
如果你合并了app.xaml中的字典,那么你可以使用:
Application.current.Resources["IsZoomable"]=false;
我一直在寻找一个程序集是否可以在运行时更改另一个程序集的 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>
是的,您可以在运行时更改资源的值。
由于您已经合并了字典,您可以像这样更改值:
this.Resources["IsZoomable"]=false;
确保资源键与实际键匹配。
如果你合并了app.xaml中的字典,那么你可以使用:
Application.current.Resources["IsZoomable"]=false;