以下代码仅禁用非数据绑定文本框。
Private Sub DisableFields()
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeOf (ctrl) Is TextBox Then
CType(ctrl, TextBox).Enabled = False
End If
Next
End Sub
答案 0 :(得分:0)
这不是正确的方法。
您应该进入每个TextBox的xaml并将IsEnabled绑定到您放置在View Model / Code Behind中的属性(expl:AllowEdit)。
此属性必须引发NotifyPropertyChanged。
您甚至可以将其设置为TextBox的默认行为,方法是在Style或默认样式中设置绑定,如果需要在此处或那里覆盖,则可以设置IsEnabled =“true”。
编辑: 要遍历所有可用的TextBox,您需要使用VisualTreeHelper来遍历 视觉树:
Public Sub ApplyOnAllDescendant(ByVal BaseUIElement As UIElement,
ByVal TargetType As Type,
ByVal NewIsEnabled As Boolean)
If BaseUIElement Is Nothing Then Return
If BaseUIElement.GetType() = TargetType Then
BaseUIElement.IsEnabled = NewIsEnabled
Else
Dim ChildCount As Integer = VisualTreeHelper.GetChildrenCount(BaseUIElement)
For i = 0 To ChildCount - 1
ApplyOnAllDescendant(VisualTreeHelper.GetChild(BaseUIElement, i),
TargetType, NewIsEnabled)
Next
End If
End Sub
你打电话:
ApplyOnAllDescendant(Me, GetType(TextBox), False)
如果你想知道是否有绑定,你可以使用
Dim Bindings = CType(BaseUIElement, Control)
.GetBindingExpression(TextBox.TextProperty)
然后查看Bindings的内容。
但同样,这不是一种“干净”的方式。