我正在尝试从Wpf Tuturial
学习WPF我在WPF和VB.Net中遇到转换问题。我正在使用VS 2012
这是我的XML代码
<Window x:Class="Binding_Sample_Converter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-Namespace:WPF_Tutorial.WPFTutorials.Converter"
Title="Binding_Sample_Converter" Height="300" Width="300">
<Window.Resources>
<!--
Error 1 The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
Error 2 The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
Error 3 The type 'local:YesNo' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.
-->
<local:YesNo x:Key="YesNo" />
</Window.Resources>
<Grid>
</Grid>
这是我的VB.Net代码
Imports System.Windows
Imports System.ComponentModel
Imports System.Windows.Data
Namespace WPFTutorials.Converter
Public Class Binding_Sample_Converter
Public Class YesNo
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Select Case value.ToString.ToLower
Case "yes"
Return True
Case "no"
Return False
End Select
Return False
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
If TypeOf value Is Boolean Then
If CBool(value) = True Then : Return "yes"
Else : Return "no"
End If
Else : Return "no"
End If
End Function
End Class
End Class
End Namespace
我正在尝试将C#代码从所述网站教程转换为VB.Net
Err是
Error 1 The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
Error 2 The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
Error 3 The type 'local:YesNo' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.
请帮助
提前致谢
Amit Saraf
编辑。 呃。 &安培;修改后警告
<!--
Warning 1 Namespace or type specified in the Imports 'WPFTutorials.Converter' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases. D:\Data - 2012\WPF\WPF_Tutotrial\obj\Debug\Binding_Sample_Converter.g.i.vb 35 9 WPF_Tutotrial
Error 2 The name "YesNo" does not exist in the namespace "clr-namespace:WPFTutorials.Converter". D:\Data - 2012\WPF\WPF_Tutotrial\Binding_Sample_Converter.xaml 11 9 WPF_Tutotrial
Error 3 The type 'local:YesNo' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built. D:\Data - 2012\WPF\WPF_Tutotrial\Binding_Sample_Converter.xaml 12 10 WPF_Tutotrial
-->
答案 0 :(得分:1)
您的代码中存在两个问题。
首先,命名空间名称区分大小写。 N
应该是小写的。名称空间声明的语法是clr-namespace
。
嵌套类YesNo
中的第二个,Binding_Sample_Converter
类,它不应该是。{你can't create an instance of nested class in XAML
。来自MSDN:
为了能够被实例化为对象元素,你的 班级必须符合以下要求:
您的自定义类必须 公开并支持默认(无参数)公共构造函数。
- 醇>
您的自定义 class不能是嵌套类。嵌套类和“点” 它们的一般CLR使用语法会干扰其他WPF和/或XAML 附加属性等功能。
XAML :
xmlns:local="clr-namespace:WPFTutorials.Converter"
转换器:
将YesNo
类移出类Public Class Binding_Sample_Converter
并直接在命名空间下声明。
Namespace WPFTutorials.Converter
Public Class Binding_Sample_Converter
End Class
Public Class YesNo
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Select Case value.ToString.ToLower
Case "yes"
Return True
Case "no"
Return False
End Select
Return False
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
If TypeOf value Is Boolean Then
If CBool(value) = True Then : Return "yes"
Else : Return "no"
End If
Else : Return "no"
End If
End Function
End Class
End Namespace