C# Can';即使输入了正确的xmlns,也不能在XAML中引用ValueConverter类
我正在Windows 10 Pro上使用Visual Studio 2015社区,更新1带有“Windows 8.1和Windows Phone 8.0/8.1工具”安装组件。我已经创建了一个项目使用空白Windows电话模板针对Windows Phone 8.1。我正在遵循,并且在使用类作为视图时遇到了一个问题。以下是我迄今为止所做的工作: 创建了我的IValueConverter类: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
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();
}
}
}
注意,该类是在我的主项目中创建的,位于namespaceRealgia.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名称空间更改为使用的基本原理的参考文档,但至少在(这似乎有点难以通过谷歌找到)。