循环资源引用导致问题?

时间:2009-06-21 16:28:44

标签: wpf resources

我在 NavigationWindow 中有一个由 Pages 组成的WPF应用程序。在App.Xaml中,我创建了所有页面,以便在使用导航命令时可以引用它们。它有点像这样:

<Application ...>
 <Application.Resources>
  <FirstPage x:Key="first"/>
  <SecondPage x:Key="second"/>
 </Application.Resources>
</Application>

当FirstPage引用“second”或反之亦然时,会发生“循环”引用(无法弄清楚还有什么可以称之为此)。在这个例子中,我们只是说第一页引用“第二”。

<FirstPage ...>
  ...
  <Button
    CommandParameter="{StaticResource second}"
  </Button>
</FirstPage>

在您开始回答之前,我将按顺序将FirstPage和SecondPage添加到应用程序资源中!

这种情况会导致一些奇怪的,无用的错误。首先,在App.xaml中,我收到错误

  

无法创建类型的实例   第一页

所以我转到FirstPage并尝试将其加载到设计器中。在xaml中,我引用“ second ”的行会突出显示,并显示此非常有用的错误消息:

  

应用程序XAML无法加载。   修复应用程序XAML中的错误   在尝试加载其他XAML之前   文件

首先是鸡肉还是鸡蛋? App.xaml无法加载,因为它无法创建FirstPage,我无法修复FirstPage,因为它实际上是app.xaml问题。

我试图解决这个问题:
1)我尝试更改添加到 Application.Resources 的项目顺序。我想如果FirstPage需要获取SecondPage,则必须在FirstPage出现之前添加SecondPage并使其可用。这不起作用。
2)我尝试使用 DynamicResource 而不是 StaticResource 。没有帮助。
3)我尝试在代码中添加Page实例。这有效,但并不令人满意。

注意,应用程序编译并运行正常;问题是为什么这会在设计时破裂。


我该怎么做才能解决这个问题?我需要在整个地方访问我的页面以用作导航参数,这就是我将它们放在应用程序资源中的原因。还有另一种方法吗?如果我可以提供帮助,我只想在我的应用程序中使用每个页面的单个实例。

1 个答案:

答案 0 :(得分:1)

您可以使用资源名称作为参数而不是资源本身。然后你的命令可以为你查找实际的资源。