2015-09-05 65 views
0

這是一個非常簡單的類最初設置控制在編輯模式或不WPF - 更新價值自定義控件

Public Class DateTBx 
    Inherits DevComponents.WpfEditors.DateTimeInput 
    Private _TextBoxNewRecord As Boolean 

    Public Property IsNewRecord As Boolean 
     Get 
      Return _TextBoxNewRecord 
     End Get 
     Set(value As Boolean) 
      _TextBoxNewRecord = value 
     End Set 
    End Property 
    Protected Overrides Sub OnInitialized(e As System.EventArgs) 
     MyBase.OnInitialized(e) 
     VerticalAlignment = Windows.VerticalAlignment.Center 
     HorizontalAlignment = Windows.HorizontalAlignment.Left 
     BorderBrush = New SolidColorBrush(Colors.Silver) 
     ClearButtonVisibility = Windows.Visibility.Hidden 

     If _TextBoxNewRecord = True Then 
      BorderThickness = New Thickness(1) 
      IsEnabled = True 
     Else 
      BorderThickness = New Thickness(0) 
      IsEnabled = False 
     End If 

    End Sub 


End Class 

,直到我想改變IsNewRecord值,它是完美的,那麼當然它不起作用。我知道使用DependencyProperty是一種方式,嘗試了一些變化,但仍然沒有亮起 - 這是一次嘗試。一個指針將不勝感激。

Public Class DateTBx 
Inherits DevComponents.WpfEditors.DateTimeInput 
Public Shared IsNewRecordProperty As DependencyProperty = DependencyProperty.Register("IsNewRecord", GetType(Boolean), GetType(DateTBx), New PropertyMetadata(New PropertyChangedCallback(AddressOf IsNewRecordChanged))) 
Private _TextBoxNewRecord As Boolean 

Public Property IsNewRecord As Boolean 
    Get 
     Return _TextBoxNewRecord 
    End Get 
    Set(value As Boolean) 
     _TextBoxNewRecord = value 
    End Set 
End Property 



Protected Overrides Sub OnInitialized(e As System.EventArgs) 
    MyBase.OnInitialized(e) 
    VerticalAlignment = Windows.VerticalAlignment.Center 
    HorizontalAlignment = Windows.HorizontalAlignment.Left 
    BorderBrush = New SolidColorBrush(Colors.Silver) 
    ClearButtonVisibility = Windows.Visibility.Hidden 

    If _TextBoxNewRecord = True Then 
     BorderThickness = New Thickness(1) 
     IsReadOnly = False 
    Else 
     BorderThickness = New Thickness(0) 
     IsReadOnly = True 
    End If 

End Sub 

Private Shared Sub IsNewRecordChanged(Sender As DependencyObject, e As DependencyPropertyChangedEventArgs) 
    Dim vControl As DateTBx = TryCast(Sender, DateTBx) 
    Dim vBoolean As Boolean = e.NewValue 
    If vBoolean = True Then 
     vControl.BorderThickness = New Thickness(1) 
     vControl.IsReadOnly = False 
    Else 
     vControl.BorderThickness = New Thickness(0) 
     vControl.IsReadOnly = True 
    End If 
End Sub 

末級

回答

1

您需要使用GetValueSetValue與依賴屬性工作時,那麼這樣的事情應該工作:

Public Property IsNewRecord As Boolean 
    Get 
     Return CBool(GetValue(IsNewRecordProperty)) 
    End Get 
    Set(value As Boolean) 
     SetValue(IsNewRecordProperty, value) 
    End Set 
End Property 

取出Private _TextBoxNewRecord As Boolean變量,並使用IsNewRecord屬性在其餘的代碼中。

+0

工作過!謝謝 :-) – gchq