1

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

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

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

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

4

1 回答 1

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。

于 2013-07-18T16:31:19.667 回答