0

我目前正在掌握 WPF 资源并想知道您是否可以帮助我:

我有一个 WPF 窗口,其中包含自己的资源。它还包含一个内容控件,该控件根据树视图中选择的内容更改其内容,例如:

contentControl1.Content = someUserControl;

这可以是一个用户控件,例如SomeUserControl它使用我在窗口 xaml 中定义的静态资源。

在后面的窗口代码中创建实例时SomeUserControl,我得到一个 XMLParseException('在'System.Windows.StaticResourceExtension' 上提供值引发异常。')。这是在包含绑定到静态资源的行上。

为了解决这个问题,我将它添加到 SomeUserControl 的构造函数中(parentResources 是 someUserControl 实例化的窗口资源):

public SomeUserControl(ResourceDictionary parentResources)
{
    this.Resources.MergedDictionaries.Add(parentResources);
    InitializeComponent();
}

这是在这种特殊情况下寻找资源的最佳方法吗?谢谢你的帮助。

4

2 回答 2

1

我假设你有一个{StaticResource myResource}. 你试过使用{DynamicResource myResource}吗?

请参阅http://msdn.microsoft.com/en-us/library/ms748942.aspx

编辑

好的,鉴于您的资源是一个转换器,它不能使用动态资源,那么我认为您正在做的可能是一个很好的解决方案。

潜在的问题是,在您的控件被实例化的那一刻,它不是 Window 的一部分,因此它无法访问 Window 的资源。正如术语静态StaticResource所暗示的那样,控件期望资源将可用。因此,您必须在实例化控件时使其可用。

您可能还想查看Prism之类的东西,它是 Region 的,这可能是处理换出“控件”的更好方法(取决于您的需要)。

于 2012-04-19T13:20:16.410 回答
1

实际上,这取决于您在谈论什么资源。

因为你这样做的方式可能非常好,唯一的缺点是你将自己从声明式编程中分离出来,这是WPF 中预期的编码方式。

您还可以添加一个StaticResource,例如在 App.xaml 中,这样它就会在您的应用程序启动时立即初始化加载,并且以任何方式窗口加载之前。

希望这可以帮助。

于 2012-04-19T13:25:06.127 回答