将 EnumMatchToBooleanConverter 添加到我的 xaml 文件时出现问题

本文关键字:问题 文件 xaml EnumMatchToBooleanConverter 添加 我的 | 更新日期: 2023-09-27 17:56:54

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

我创建了一个名为EnumMatchToBooleanConverter的类,它位于我的wpf项目的顶层。它说要把窗口放在一个窗口里面,资源是这样的:

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

我在用户控件中使用它,所以我将其放在堆栈面板中:

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

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

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

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

我只是尝试将其放置在网格资源中

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

它说

找不到类型"EnumMatchToBooleanConverter"。验证是否没有缺少程序集引用,并且已生成所有引用的程序集。

好吧,它

与我项目的其余部分位于同一命名空间中,所以我不确定为什么找不到它。

将 EnumMatchToBooleanConverter 添加到我的 xaml 文件时出现问题

更改

<EnumMatchToBooleanConverter x:Key="enumConverter" />

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

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

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

<EnumMatchToBooleanConverter x:Key="enumConverter" />

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

我仍在努力弄清楚将这种技术带到多远,Paul Stovell 谈到了将其发挥到极致,就像我上面展示的那样。

即使您最终没有将其应用到该程度,如果您正在查看其他人的 Xaml 并且他们已经应用了这样的映射,了解它可能会派上用场。 知道这一点会提醒您查找AssemblyInfo.cs文件并检查映射,并可能帮助您跟踪控件/值转换器/等的实际位置。