我有一个绑定(bind)到名为“Attrs”的ObservableCollection的ComboBox。
我还有一个绑定(bind)到“CustomValue”的文本框。

根据用户选择的属性,我希望文本框仅接受某些字符。例如,如果Attrs.Name为“数字”,则我希望文本框仅接受数字字符;如果Attrs.Name为“文本”,则我希望文本框接受任何东西。

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

任何想法或链接都可以帮助您。

最佳答案

我打算发表评论,并询问您是否已经尝试过此操作,但是我没有足够高的代表发表评论,所以我想我会在这里回答。另外,不幸的是,我现在只能提供VB.Net代码,而不是C#。但希望至少有帮助。

您可以创建一个继承TextBox的自定义控件,并创建一个可以绑定(bind)到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。

关于c# - 限制文本框输入取决于所选的组合框项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17728393/

10-12 00:05
查看更多