下面给出的代码仅禁用非数据绑定文本框。
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
下面给出的代码仅禁用非数据绑定文本框。
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
这不是正确的做法。
您应该进入每个 TextBox 的 xaml 并将 IsEnabled 绑定到您放入视图模型/代码后面的属性(expl:AllowEdit)。此属性必须引发 NotifyPropertyChanged。您甚至可以将其设置为 TextBox 的默认行为,方法是在 Style 或默认 Style 中设置绑定,如果您需要在这里或那里覆盖,您可以设置 IsEnabled="true"。
编辑:要遍历所有可用的文本框,您需要使用 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的内容。
但同样,这不是一种“干净”的方式。