.NET 4.0 中存在一个问题,在 3.5 中不存在(没有测试过更早或更晚的框架)。
我创建了一个演示用户控件,它只有一个属性 Num(整数类型):
Public Class UserControl1
Public Shared NumProperty As DependencyProperty = _
DependencyProperty.Register("Num", _
GetType(Integer), _
GetType(UserControl1), _
New PropertyMetadata(defaultValue:=0, _
PropertyChangedCallback:=New PropertyChangedCallback(AddressOf OnNumPropertyChanged), _
CoerceValueCallback:=New CoerceValueCallback(AddressOf OnNumPorpertyCoerce)), _
New ValidateValueCallback(AddressOf IsNumValid))
Public Property Num As Integer
Get
Return GetValue(NumProperty)
End Get
Set(value As Integer)
SetValue(NumProperty, value)
End Set
End Property
Public Shared Function IsNumValid(value As Object) As Boolean
If value IsNot Nothing And TypeOf value Is Integer Then
If CInt(value) < 0 Then
Return False
End If
End If
Return True
End Function
Public Shared Sub OnNumPropertyChanged(sender As DependencyObject, e As DependencyPropertyChangedEventArgs)
' do nothing here
End Sub
End Class
因此,基本上,您不能将任何小于零的值设置为 Num。
问题
当我在 WPF 窗口中使用此控件并尝试设置 Num=-1 时,我得到了异常。但是,如果我尝试将此控件用作 DataTemplate 的一部分,并且还设置 Num=-1,则不会引发异常。
我试图在我的用户控件的验证过程中放置一个断点,但它只在窗口中的用户控件的情况下被击中,如果我在 DataTemplate 中有用户控件,它不会被击中。
谁能解释为什么不从 DataTemplate 执行验证?
PS 你可以在微软的论坛上找到相关的帖子:http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/f7fd05a5-cae3-496a-8abe-590541ecdd0a