我有一個綁定到名爲「Attrs」的ObservableCollection的組合框。 我也有一個綁定到「CustomValue」的文本框。限制文本框輸入依賴於組合框項目選擇
取決於用戶選擇哪個Attrs我希望文本框只接受某些字符。例如,如果Attrs.Name是「Numeric」,我希望文本框只接受數字字符,如果Attrs.Name是「Text」,我希望文本框接受任何內容。
我看了DataTemplates和驗證,但我沒有解決問題或找到解決方法。
任何想法或鏈接都可以提供幫助。
我有一個綁定到名爲「Attrs」的ObservableCollection的組合框。 我也有一個綁定到「CustomValue」的文本框。限制文本框輸入依賴於組合框項目選擇
取決於用戶選擇哪個Attrs我希望文本框只接受某些字符。例如,如果Attrs.Name是「Numeric」,我希望文本框只接受數字字符,如果Attrs.Name是「Text」,我希望文本框接受任何內容。
我看了DataTemplates和驗證,但我沒有解決問題或找到解決方法。
任何想法或鏈接都可以提供幫助。
我打算髮表評論,並問你是否已經嘗試過,但我還沒有足夠的代表評論,所以我想我會在這裏回答。此外,不幸的是,我可以給你的是VB.Net代碼,而不是c#。但希望它至少有助於。
你可以創建一個繼承文本框自定義的控制,並創建可以綁定到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清除如果類型變化的文本框,它有無效字符。
感謝Jon的快速回答,我會檢查並確定這是否有效,並回復您! – user2595595
有兩個文本框可能會更容易,一個只驗證數字,另一個驗證文本。然後,您只需切換文本框的可見性,具體取決於組合框中選定的內容。 – MadHenchbot
我決定使用這兩個文本框,因爲我沒有必要綁定任何類型的可見性,所以更容易實現。我甚至決定添加另一個盒子。感謝Henchbot! – user2595595