2

我正在尝试从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

错误是

        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.

请帮忙

提前致谢

阿米特·萨拉夫

编辑。呃。& 修改后警告

        <!--
    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
    -->
4

1 回答 1

1

您的代码中有两个问题。

首先,命名空间名称区分大小写。N应该是小写。命名空间声明的语法是clr-namespace.

其次,它不应该是YesNo嵌套类中的类。Binding_Sample_Convertercan't create an instance of nested class in XAML。来自MSDN

为了能够被实例化为对象元素,您的类必须满足以下要求:

  1. 您的自定义类必须是公共的并且支持默认(无参数)公共构造函数。

  2. 您的自定义类不能是嵌套类。嵌套类及其常规 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
于 2013-12-29T10:10:35.557 回答