C# 从C转换为VB.NET的代码中出现奇怪错误#

C# 从C转换为VB.NET的代码中出现奇怪错误#,c#,vb.net,dependency-properties,C#,Vb.net,Dependency Properties,可能重复: 阅读时,我得到了以下代码: public static class Helper { public static bool GetAutoScroll(DependencyObject obj) { return (bool)obj.GetValue(AutoScrollProperty); } public static void SetAutoScroll(DependencyObject obj, bool value)

可能重复:

阅读时,我得到了以下代码:

public static class Helper
{
    public static bool GetAutoScroll(DependencyObject obj)
    {
        return (bool)obj.GetValue(AutoScrollProperty);
    }

    public static void SetAutoScroll(DependencyObject obj, bool value)
    {
        obj.SetValue(AutoScrollProperty, value);
    }

    public static readonly DependencyProperty AutoScrollProperty =
        DependencyProperty.RegisterAttached("AutoScroll", typeof(bool),
        typeof(Helper),
        new PropertyMetadata(false, AutoScrollPropertyChanged));

    private static void AutoScrollPropertyChanged(DependencyObject d,
        DependencyPropertyChangedEventArgs e)
    {
        var scrollViewer = d as ScrollViewer;

        if (scrollViewer != null && (bool)e.NewValue)
        {
            scrollViewer.ScrollToBottom();
        }
    }
}
由于我在VB.NET中工作,因此我对其进行了转换并获得:

Public NotInheritable Class Helper

    Private Sub New()
    End Sub

    Public Shared Function GetAutoScroll(ByVal obj As DependencyObject)
    As Boolean
        Return CBool(obj.GetValue(AutoScrollProperty))
    End Function

    Public Shared Sub SetAutoScroll(ByVal obj As DependencyObject,
    ByVal value As Boolean)
        obj.SetValue(AutoScrollProperty, value)
    End Sub

    Public Shared ReadOnly AutoScrollProperty As DependencyProperty =
        DependencyProperty.RegisterAttached("AutoScroll", GetType(Boolean),
        GetType(Helper),
        New PropertyMetadata(False, AutoScrollPropertyChanged)) // Error Here

    Private Shared Sub AutoScrollPropertyChanged(ByVal d As
    System.Windows.DependencyObject, ByVal e As
    System.Windows.DependencyPropertyChangedEventArgs)
        Dim scrollViewer = TryCast(d, ScrollViewer)

        If scrollViewer IsNot Nothing AndAlso CBool(e.NewValue) Then
            scrollViewer.ScrollToBottom()
        End If
    End Sub

End Class
但是C#代码编译并运行良好,但在VB.NET中,代码给出了一个错误(在代码中标记),说明:

未为“私有共享子AutoScrollPropertyChanged(d为System.Windows.DependencyObject,e为System.Windows.DependencyPropertyChangedEventArgs)”的参数“e”指定参数

我错过了什么?
PropertyChangedCallback
委托正是在对象浏览器中定义的方式:

Public Delegate Sub PropertyChangedCallback(
    ByVal d As System.Windows.DependencyObject, ByVal e As
    System.Windows.DependencyPropertyChangedEventArgs)
C#有一个语言特性,可以将方法组转换为委托类型。因此,不是:

private void Foo() {}
private void Bar(Action arg) {}

Bar(new Action(Foo));
你可以写:

Bar(Foo);
我不是一个喜欢VB的人,但我怀疑VB.NET没有这样的功能。 看起来您需要操作员:

New PropertyMetadata(False, AddressOf AutoScrollPropertyChanged)
Public Shared ReadOnly AutoScrollProperty As DependencyProperty =
        DependencyProperty.RegisterAttached("AutoScroll", GetType(Boolean),
        GetType(Helper),
        New PropertyMetadata(False, AddressOf AutoScrollPropertyChanged))

我没有编译它,但我认为您应该参考AutoScrollPropertyChanged和AddressOf运算符:

New PropertyMetadata(False, AddressOf AutoScrollPropertyChanged)
Public Shared ReadOnly AutoScrollProperty As DependencyProperty =
        DependencyProperty.RegisterAttached("AutoScroll", GetType(Boolean),
        GetType(Helper),
        New PropertyMetadata(False, AddressOf AutoScrollPropertyChanged))

另请参见VB.Net和中有关方法组的其他问题