2013-07-18 54 views
1

我有一個綁定到名爲「Attrs」的ObservableCollection的組合框。 我也有一個綁定到「CustomValue」的文本框。限制文本框輸入依賴於組合框項目選擇

取決於用戶選擇哪個Attrs我希望文本框只接受某些字符。例如,如果Attrs.Name是「Numeric」,我希望文本框只接受數字字符,如果Attrs.Name是「Text」,我希望文本框接受任何內容。

我看了DataTemplates和驗證,但我沒有解決問題或找到解決方法。

任何想法或鏈接都可以提供幫助。

+0

有兩個文本框可能會更容易,一個只驗證數字,另一個驗證文本。然後,您只需切換文本框的可見性,具體取決於組合框中選定的內容。 – MadHenchbot

+1

我決定使用這兩個文本框,因爲我沒有必要綁定任何類型的可見性,所以更容易實現。我甚至決定添加另一個盒子。感謝Henchbot! – user2595595

回答

0

我打算髮表評論,並問你是否已經嘗試過,但我還沒有足夠的代表評論,所以我想我會在這裏回答。此外,不幸的是,我可以給你的是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清除如果類型變化的文本框,它有無效字符。

+0

感謝Jon的快速回答,我會檢查並確定這是否有效,並回復您! – user2595595