我目前正在掌握WPF资源并想知道你是否可以帮助我:
我有一个WPF窗口,其中包含自己的资源。它还包含一个内容控件,它根据树视图中选择的内容更改其内容,例如:
contentControl1.Content = someUserControl;
这可以是UserControl,例如SomeUserControl
使用我在窗口xaml中定义的静态资源。
在后面的窗口代码中创建SomeUserControl
的实例时,我得到一个XMLParseException('System.Windows.StaticResourceExtension'上的'提供值引发异常。')。这是包含对静态资源的绑定的行。
为了解决这个问题,我将其添加到SomeUserControl的构造函数中(parentResources是实例化someUserControl的窗口资源):
public SomeUserControl(ResourceDictionary parentResources)
{
this.Resources.MergedDictionaries.Add(parentResources);
InitializeComponent();
}
这是在这种特殊情况下寻找资源的最佳方法吗?谢谢你的帮助。
答案 0 :(得分:1)
我假设你有{StaticResource myResource}
。您是否尝试过使用{DynamicResource myResource}
?
请参阅http://msdn.microsoft.com/en-us/library/ms748942.aspx
修改强>
好的,鉴于你的资源是一个转换器,它不能使用动态资源,那么我认为你所做的可能是一个很好的解决方案。
潜在的问题是,在您的控件被实例化的那一刻,它不是Window的一部分,因此它无法访问Window的资源。正如StaticResource
中的术语static所暗示的那样,控件期望资源可用。因此,在实例化控件时必须使其可用。
您可能还希望查看类似Prism的内容以及区域内容,这可能是更好地处理交换“控件”的方式(取决于您的需求)。
答案 1 :(得分:1)
实际上,这取决于你所谈论的资源。
因为你做这件事的方式可能非常好,只有缺点,你可以脱离声明性编程,这是期望在WPF中编码的方式。
您还可以在App.xaml中添加StaticResource
,这样一旦您的应用启动,它就会被初始化和,并以任何方式在窗口加载之前。
希望这有帮助。