2015-09-05 125 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