我有一个ComboBox绑定到名为“Attrs”的ObservableCollection。 我还有一个绑定到“CustomValue”的文本框。
根据用户选择的Att,我希望文本框只接受某些字符。例如,如果Attrs.Name是“Numeric”,我希望文本框只接受数字字符,如果Attrs.Name是“Text”,我希望文本框接受任何内容。
我查看了DataTemplates和Validation,但我未能解决问题或找到解决方法。
任何想法或链接都可以提供帮助。
答案 0 :(得分:0)
我打算发表评论并询问你是否已经尝试过这个但是我还没有足够高的评论来评论,所以我想我会在这里回答。另外,遗憾的是我现在只能给你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。