[英]WPF ContentControl content not getting parent Resources
我目前正在掌握WPF资源,并想知道你是否可以帮助我:
我有一个WPF窗口,其中包含自己的资源。 它还包含一个内容控件,它根据树视图中选择的内容更改其内容,例如:
contentControl1.Content = someUserControl;
这可以是UserControl,例如SomeUserControl
,它使用我在窗口xaml中定义的静态资源。
在后面的窗口代码中创建SomeUserControl
的实例时,我得到一个XMLParseException('System.Windows.StaticResourceExtension上的'Provide值'抛出异常。')。 这是包含对静态资源的绑定的行。
为了解决这个问题,我将其添加到SomeUserControl的构造函数中(parentResources是实例化someUserControl的窗口资源):
public SomeUserControl(ResourceDictionary parentResources)
{
this.Resources.MergedDictionaries.Add(parentResources);
InitializeComponent();
}
这是在这种特殊情况下寻找资源的最佳方法吗? 谢谢你的帮助。
我假设你有一个{StaticResource myResource}
。 您是否尝试过使用{DynamicResource myResource}
?
请参阅http://msdn.microsoft.com/en-us/library/ms748942.aspx
编辑
好吧,鉴于你的资源是一个转换器,它不能使用动态资源,那么我认为你所做的可能是一个很好的解决方案。
根本问题是,在您的控件实例化时,它不是Window的一部分,因此它无法访问Window的资源。 正如StaticResource
的术语static所暗示的那样,控件期望资源可用。 因此,在实例化控件时必须使其可用。
您可能还想看看像Prism这样的区域,这可能是更好的方式来处理交换“控件”(取决于您的需求)。
实际上,这取决于你所谈论的资源。
因为你做它的方式可能非常好,只有缺点,你可以从声明性编程中分离出来,这是WPF中编码的预期方式。
您还可以添加StaticResource
,例如在App.xaml中,因此一旦应用程序启动,它将在窗口加载之前以任何方式进行初始化和加载。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.