1

我正在尝试遵循此单选按钮教程

我创建了一个名为 EnumMatchToBooleanConverter 的类,它位于我的 wpf 项目的顶层。它说将内部放置在一个 window.resources 中,如下所示:

<Window.Resources>
  <EnumMatchToBooleanConverter x:Key="enumConverter" />
</Window.Resources>

我在用户控件中使用它,所以我把它放在了一个堆栈面板中:

<StackPanel.Resources>
  <EnumMatchToBooleanConverter x:Key="enumConverter" />
</StackPanel.Resources>

我有 Microsoft Visual Studio Ultimate 2012,它给了我一个错误:

Windows Presentation Foundation (WPF) 项目不支持 EnumMatchToBooleanConverter。

关于我做错了什么的任何想法?我不允许将它放在 stackpanel.resources 中吗?

我只是试着把它放在一个 grid.resources

<Grid.Resources>
  <EnumMatchToBooleanConverter x:Key="enumConverter" />
</Grid.Resources>

它说

找不到类型“EnumMatchToBooleanConverter”。确认您没有丢失程序集引用并且所有引用的程序集都已构建。

好吧,它与我的项目的其余部分在同一个命名空间中,所以我不确定为什么它没有找到它。

4

2 回答 2

3

改变

<EnumMatchToBooleanConverter x:Key="enumConverter" />

为了

<local:EnumMatchToBooleanConverter x:Key="enumConverter" />

您在 XAML 中引用的所有非内置类都必须以相应的 xmlns 前缀作为前缀。

于 2013-01-30T18:04:13.867 回答
2

HighCore 做对了。只是为了添加到这个命名空间讨论中,我想我会指出另一种方法,可以帮助使代码更具可读性或帮助您诊断某些控件/值转换器/等的来源(即它们真正来自哪个程序集)。这种技术可以让您的 XAML 看起来就像 Christian 在他的博客中所拥有的一样(没有xmlns 前缀):

<EnumMatchToBooleanConverter x:Key="enumConverter" />

本质上,您执行一些命名空间映射来整合这样的命名空间(仅当文件位于不同的程序集/项目中时才有效)。因此,在我上面的示例中,您已将命名空间之一映射到默认 xmlns,因此您不需要 XAML 中的任何前缀。

我仍在试图弄清楚这项技术能走多远,Paul Stovell谈到将其发挥到极致,就像我在上面展示的那样。

即使您最终没有将它应用到那个程度,如果您正在查看其他人的 Xaml 并且他们已经应用了这样的映射,了解它可能会派上用场。知道这会提醒您查找 AssemblyInfo.cs 文件并检查映射,并可能帮助您追踪 Control/Value Converter/etc 的实际位置。

于 2013-01-30T19:04:53.663 回答