WPF 自定义控件 VB.net

WPF Custom Control VB.net

我在 VB.NET 中创建了一个名为 ecTextBox 的自定义控件,它使用 Generic.xaml 中的控件模板。行得通。

在自定义控件的隐藏代码中,我覆盖了构造函数中的元数据:

Public Sub New()
    DefaultStyleKeyProperty.OverrideMetadata(GetType(ecTextBox), New FrameworkPropertyMetadata(GetType(ecTextBox)))
End Sub

在MainWindow.xaml中我使用自定义控件简单

<ec:ecTextBox/>

效果不错。

但是如果我抛出第二个控件或更改 MainWindow.xaml 中第一个 ecTextBox 的属性,我会收到消息 "PropertyMetaData is already registered for type ecTextBox".

在我读到的 Whosebug 中,C# 程序员应该对构造函数使用 static-关键字。但是如果我将构造函数更改为

Shared Sub New
    DefaultStyleKeyProperty.OverrideMetadata(GetType(ecTextBox), New FrameworkPropertyMetadata(GetType(ecTextBox)))
End Sub

第二个自定义控件不使用控件模板,而是显示为无边框的普通文本框。

覆盖所有使用的 ecTextBox 控件的元数据并防止错误的正确方法是什么?

这是解决方案:

Public Sub New()
    MyBase.New()
End Sub

Shared Sub New()
    DefaultStyleKeyProperty.OverrideMetadata(GetType(ecTextBox), New FrameworkPropertyMetadata(GetType(ecTextBox)))
End Sub