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
我在 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