【发布时间】:2014-03-19 05:26:23
【问题描述】:
我正在尝试遵循 this 教程,但我不清楚 EnumMatchToBooleanConverter 类的代码应该去哪里。我假设它会进入代码隐藏文件(即 view.xaml.cs),但是当我尝试在 XAML 中声明资源时,我收到了类似于 The type EnumMatchToBooleanConverter was not found 的错误。
【问题讨论】:
标签: c# wpf xaml radio-button
我正在尝试遵循 this 教程,但我不清楚 EnumMatchToBooleanConverter 类的代码应该去哪里。我假设它会进入代码隐藏文件(即 view.xaml.cs),但是当我尝试在 XAML 中声明资源时,我收到了类似于 The type EnumMatchToBooleanConverter was not found 的错误。
【问题讨论】:
标签: c# wpf xaml radio-button
一般来说,一个小的 WPF 项目应该有如下大致的文件夹结构:
Converters 是您应该存储Converter 类的文件夹。开发 WPF 一段时间后,您会发现您的 Converter 类集合的大小会增加。这些文件夹中的每一个都包含我们映射到相关命名空间的类。对于Converter 类,它通常是这样的:
namespace ProjectName.Converters
{
[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolToBrushConverter : IValueConverter
{
...
}
}
对于DataTypes 类,您可以使用如下内容:
namespace ProjectName.DataTypes
{
public class SomeDataType
{
...
}
}
正如@LordTakkera 正确提到的那样,您需要通过像这样定义 XAML 命名空间来在 XAML 中引用这些类:
xmlns:Converters="clr-namespace:ProjectName.Converters"
然后您可以像这样在Resources 部分定义Converter:
<Converters:BoolToBrushConverter x:Key="BoolToBrushConverter" />
有关详细信息,请参阅 MSDN 上 Data Binding Overview 页面的数据转换部分。 MSDN 上的IValueConverter interface 页面是另一个有用的资源。
【讨论】:
在这种情况下,EnumMatchToBooleanConverter 是它自己的类。您应该能够在后面的现有代码中声明它,但为了确定,我会将它粘贴到它自己的文件中。 Visual Studio 在查找资源时可能会很笨,因此您应该重建项目以防仍然显示错误。
【讨论】:
转换器(与所有其他类一样)属于它们自己的文件。
然后,您只需在 XAML 中包含命名空间:
xmlns:local="clr-namespace:MyNamespace"
此外,请尝试重新构建/运行应用,因为 XAML“智能感知”通常在构建完成之前不会更新命名空间中的内容。
【讨论】: