限制依赖于所选组合框项目的文本框输入

本文关键字:项目 文本 输入 组合 依赖于 | 更新日期: 2023-09-27 18:23:44

我有一个绑定到名为"Attrs"的ObservableCollection的组合框。我还有一个绑定到"CustomValue"的文本框。

根据用户选择的Attr,我希望文本框只接受某些字符。例如,如果Attr.Name为"Numeric",我希望文本框只接受数字字符,如果Attrs.Name为"Text",我则希望文本框接受任何内容。

我查看了DataTemplates和Validation,但未能解决问题或找到解决方法。

任何想法或链接都可能有所帮助。

限制依赖于所选组合框项目的文本框输入

我本来打算发表评论,问你是否已经尝试过了,但我还没有足够高的代表来发表评论,所以我想我会在这里回答。此外,不幸的是,我现在能给你的只是VB.Net代码,而不是c#。但希望它至少能有所帮助。

您可以创建一个继承TextBox的自定义控件,并创建一个可以绑定到ComboBox所选类型的DependencyProperty:

Private Shared InputTypeProperty As DependencyProperty = DependencyProperty.Register("InputType", GetType(MyInputType), GetType(MyTextBox))
Public Property InputType As MyInputType
    Get
        Return GetValue(InputTypeProperty)
    End Get
    Set(value As MyInputType)
        SetValue(InputTypeProperty, value)
    End Set
End Property

然后在自定义控件中,使用PreviewKeyDown事件来处理基于控件的InputType属性的输入。每当输入无效字符类型时,将e.Handled设置为True,它将忽略输入。

Private Sub MyTextBox_PreviewKeyDown(sender As Object, e As KeyEventArgs) Handles Me.PreviewKeyDown
    Select Case InputType
        'Handle input here
    End Select
End Sub

如果类型发生更改并且包含无效字符,您可能还希望在依赖项属性中进行PropertyChangedCallback以清除TextBox。