C# 根据所选组合框项目限制文本框输入

C# 根据所选组合框项目限制文本框输入,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个组合框,它绑定到名为“Attrs”的ObservableCollection。 我还有一个绑定到“CustomValue”的文本框 根据用户选择的属性,我希望文本框只接受某些字符。例如,如果Attrs.Name为“Numeric”,我希望文本框只接受数字字符,如果Attrs.Name为“Text”,我希望文本框接受任何内容 我已经查看了数据模板和验证,但我没有解决这个问题或找到解决方法 任何想法或链接都会有帮助。我想评论一下,问你是否已经尝试过了,但我还没有足够的代表发表评论,所以我想我

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

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

我已经查看了数据模板和验证,但我没有解决这个问题或找到解决方法


任何想法或链接都会有帮助。

我想评论一下,问你是否已经尝试过了,但我还没有足够的代表发表评论,所以我想我会在这里回答。另外,不幸的是,我现在只能给你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

如果类型更改并且文本框包含无效字符,您可能还需要在dependency属性中创建PropertyChangedCallback以清除文本框。

如果有两个文本框,一个只验证数字,另一个只验证文本,可能会更容易。然后,您所要做的就是根据组合框中选择的内容切换文本框的可见性。我决定使用这两个文本框,因为我不必绑定任何类型,只需绑定可见性,所以实现起来更容易。我甚至决定再加一个盒子。谢谢亨希伯特!谢谢你的快速回答,乔恩,我会检查一下,看看这是否有效,然后再给你回复!