【问题标题】:Where does the code for WPF a window/usercontrol resource go?WPF 窗口/用户控件资源的代码在哪里?
【发布时间】:2014-03-19 05:26:23
【问题描述】:

我正在尝试遵循 this 教程,但我不清楚 EnumMatchToBooleanConverter 类的代码应该去哪里。我假设它会进入代码隐藏文件(即 view.xaml.cs),但是当我尝试在 XAML 中声明资源时,我收到了类似于 The type EnumMatchToBooleanConverter was not found 的错误。

【问题讨论】:

    标签: c# wpf xaml radio-button


    【解决方案1】:

    一般来说,一个小的 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 页面是另一个有用的资源。

    【讨论】:

      【解决方案2】:

      在这种情况下,EnumMatchToBooleanConverter 是它自己的类。您应该能够在后面的现有代码中声明它,但为了确定,我会将它粘贴到它自己的文件中。 Visual Studio 在查找资源时可能会很笨,因此您应该重建项目以防仍然显示错误。

      【讨论】:

        【解决方案3】:

        转换器(与所有其他类一样)属于它们自己的文件。

        然后,您只需在 XAML 中包含命名空间:

        xmlns:local="clr-namespace:MyNamespace"
        

        此外,请尝试重新构建/运行应用,因为 XAML“智能感知”通常在构建完成之前不会更新命名空间中的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-15
          • 2012-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多