C# Can';即使输入了正确的xmlns,也不能在XAML中引用ValueConverter类

C# Can';即使输入了正确的xmlns,也不能在XAML中引用ValueConverter类,c#,xaml,windows-phone-8.1,visual-studio-2015,C#,Xaml,Windows Phone 8.1,Visual Studio 2015,我正在Windows 10 Pro上使用Visual Studio 2015社区,更新1带有“Windows 8.1和Windows Phone 8.0/8.1工具”安装组件。我已经创建了一个项目使用空白Windows电话模板针对Windows Phone 8.1。我正在遵循,并且在使用类作为视图时遇到了一个问题。以下是我迄今为止所做的工作: 创建了我的IValueConverter类: namespace Realgia.WindowsPhone { public class Valu

我正在Windows 10 Pro上使用Visual Studio 2015社区,更新1带有“Windows 8.1和Windows Phone 8.0/8.1工具”安装组件。我已经创建了一个项目使用空白Windows电话模板针对Windows Phone 8.1。我正在遵循,并且在使用类作为视图时遇到了一个问题。以下是我迄今为止所做的工作:

创建了我的IValueConverter类:

namespace Realgia.WindowsPhone
{
    public class ValueConverterDate : IValueConverter
    {
        // This converts the DateTime object to the string to display.
        public object Convert(object value, Type targetType,
            object parameter, string language)
        {
            // Retrieve the format string and use it to format the value.
            string formatString = parameter as string;
            if (!string.IsNullOrEmpty(formatString))
            {
                return string.Format(
                    new CultureInfo(language), formatString, value);
            }
            // If the format string is null or empty, simply call ToString()
            // on the value.
            return value.ToString();
        }

        // No need to implement converting back on a one-way binding 
        public object ConvertBack(object value, Type targetType,
            object parameter, string language)
        {
            throw new NotImplementedException();
        }
    }
}
注意,该类是在我的主项目中创建的,位于namespace
Realgia.WindowsPhone
。还要注意,我使用的界面是
Windows.UI.Xaml.Data.IValueConverter
,而不是本教程中使用的
System.Windows.Data.IValueConverter
(我相信本教程已经过时了?)

在UserControl的XAML中,我为我的命名空间添加了一个xmlns,其中包含ValueConverter:

xmlns:converters="clr-namespace:Realgia.WindowsPhone"
现在,我试图将转换器作为资源添加到同一XAML文件中的UserControl中。如下所示,intellisense实际上获取了我的ValueConverterDate类:

因此,完整的XAML代码是:

<UserControl
    x:Class="Realgia.WindowsPhone.View.MeasurementsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:converters="clr-namespace:Realgia.WindowsPhone"

    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">

    <UserControl.Resources>
        <converters:ValueConverterDate x:Key="ValueConverterDate" />
    </UserControl.Resources>

    <Grid>
    </Grid>
</UserControl>

我在编译时不断遇到以下错误:

XML命名空间中的未知类型“ValueConverterDate” 'clr命名空间:Realgia.WindowsPhone;assembly=Realgia.WindowsPhone, 版本=1.0.0.0,区域性=中性,PublicKeyToken=空'

我真的很难理解为什么XAML解析器找不到这个类,因为它是由intellisense获取的,这个CALS的名称空间是Realgia.WindowsPhone(正如您从类定义中看到的),我的xmlns指向这个名称空间

我尝试了以下方法:

  • 清理和重建
  • 引用另一个类(只是一个普通的旧空类)——同样的问题
  • 将类移动到XAML文件的codebehind中,而不是它自己的代码文件中
  • 重置我的电脑并重新安装Visual Studio
  • 阅读并重新阅读XAML文档
  • 删除
    代码位,编译(它编译成功),然后重新添加代码并尝试再次编译
  • 尝试使用
    xmlns:converters=“using:Realgia.WindowsPhone”
    而不是
    xmlns:converters=“clr namespace:Realgia.WindowsPhone”
    请参见编辑:
编辑并查看注释,解决方案实际上是使用
xmlns:converters=“使用:Realgia.WindowsPhone”
而不是
xmlns:converters=“clr命名空间:Realgia.WindowsPhone”
我肯定我试过一次,但没有成功,不确定我第一次是否犯了错误,或者我是否做了其他事情“修复”了这个问题(例如关闭解决方案、重新启动计算机)

我开始怀疑问题可能是因为我使用的是
Windows.UI.Xaml.Data.IValueConverter
,而不是
System.Windows.Data.IValueConverter
,但是
System.Windows.Data.IValueConverter
在assembly PresentationFramework.dll中,使用Visual Studio“添加引用”中的搜索,我在任何地方都找不到此程序集。如果有人能解释这一历史(为什么在两个不同的程序集中有两个IValueConverter接口?)也许会有所帮助-文档中没有提到这一点。两者之间只有一点区别(一个接受字符串参数,另一个接受CultureInfo参数)


有什么想法吗?

我刚刚对此进行了一番分析,一个WP8.1应用程序(非silverlight)需要使用“
”xmlns语法并使用
Windows.UI.Xaml.Data.IValueConverter
”。如果创建了WP8.1 silverlight应用程序,则应使用clr命名空间:xmlns语法并实现
System.Windows.Data.IValueConverter
。考虑到您只有第一个valueconverter,我认为您需要使用
语法坚持使用
。再次检查您是否遇到intellisense故障,我以前在WPF项目中见过此类错误,但它们仅由intellisense生成,实际编译工作正常(检查“输出”窗格)。

视图和值转换器是否在同一项目中?也许您在视图项目中缺少对主项目的项目引用?我有一个WP 8.1项目,并且我正在成功地使用
xmlns:converters=“using:Realgia.WindowsPhone”
语法。使用
using
语法时会出现什么错误?我刚刚解释了一下,WP8.1应用程序(非silverlight)需要“using”xmlns语法,并使用Windows.UI.Xaml.Data.IValueConverter。如果创建了WP8.1 silverlight应用程序,则应使用clr命名空间:xmlns语法并实现System.Windows.Data.IValueConverter。鉴于您只有第一个valueconverter,我认为您需要坚持使用语法。再次检查您是否遇到intellisense故障,我以前在WPF项目中见过此类错误,但它们仅由intellisense生成,实际编译工作正常(检查“输出”窗格)。视图和值转换器位于同一项目中。这是一个非silverlight WP8.1应用程序。我只是再次尝试使用
语法,效果很好!我肯定我以前试过这个,但它没有编译,不确定我是否犯了错误,我似乎记得它给了我同样的错误,没有在名称空间中找到类。如果你想把这个作为一个答案,我会接受的!非常感谢!谢谢Evert,
xmlns:converters=“using:Realgia.WindowsPhone”
成功了!我很难在xmlns中找到任何关于
使用
的文档,您知道
使用
clr名称空间
之间的区别吗?我找不到任何描述从clr名称空间更改为使用的基本原理的参考文档,但至少在(这似乎有点难以通过谷歌找到)。