2015-06-12 162 views
0

我在VB.NET中創建了一個名爲的ecTextBox的自定義控件,該控件使用Generic.xaml中的控件模板。這樣可行。WPF自定義控件VB.net

在代碼自定義控件我在構造函數重載元數據的背後:

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

在MainWindow.xaml我使用自定義的控制用一個簡單的

<ec:ecTextBox/> 

這工作正常。

但是,如果我拋出第二個控件或更改MainWindow.xaml中的第一個ecTextBox的屬性,我收到消息「PropertyMetaData已經註冊了類型ecTextBox」。

在StackOverflow我讀過,C#程序員應該使用靜態 - 構造函數的關鍵字。但是,如果我改變構造函數

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

不使用控制模板,但顯示爲無邊框的普通文本框的第二個自定義控制。

覆蓋所有使用的ecTextBox控件的元數據並防止錯誤的正確方法是什麼?

回答

0

這是解決方案:

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

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