2010-06-22 47 views
3

我有一個可編輯的WPF組合框和TextSearchEnabled。當他們鍵入以過濾ComboBox時,我需要強制用戶的文本輸入爲大寫。WPF組合框,強制輸入到UpperCase

我正在考慮修改屬於控件(名爲'PART_EditableTextBox')的文本框來設置CharacterCasing =「Upper」,但是我無法完全弄清楚如何做到這一點。

我是否需要使用觸發器或以某種方式修改模板?

回答

8

這工作和似乎是一個合理的解決方案:

protected void winSurveyScreen_Loaded(object sender, RoutedEventArgs e) 
{ 
    (comboBox.Template.FindName("PART_EditableTextBox", cbObservation) as TextBox).CharacterCasing = CharacterCasing.Upper; 
} 

確保組合框沒有癱倒在加載的,否則模板不會被發現。

+1

無法解析符號cbObservation ...? – 2015-05-14 08:59:25

+0

而不是「comboBox」和「cbObservation」,我使用組合框名稱 – 2016-12-15 15:34:48

3

IMO,更快的方法是將UpdateTrigger設置爲PropertyChanged,並在數據對象中更新時更新大寫值。

-1
private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    Textbox editableTextbox = sender as Textbox; 
    foreach (char ch in e.Text) 
    { 
     if (Char.IsLower(ch)) 
     { 
      editableTextbox.Text += Char.ToUpper(ch); 
      e.Handled = true; 
     } 
    } 
} 

或嘗試創建attached behaviour for the textbox

+0

我相信這段代碼會將所有大寫字母去掉輸入。 – 2010-06-22 16:55:01

+0

@Robert Rossney:我不這麼認爲。只有在字符較小的情況下,它纔會被轉換爲大寫字母,並明確地附加到文本框中,並且進一步的處理將變爲假。如果它是較高的,那麼它根本不處理。 – Amsakanna 2010-06-23 04:49:09

+0

好吧,我不會破壞你的驚喜,但你應該測試一下。它沒有達到我期望的效果,但它沒有達到你期望的效果。我從這個練習中得出的結論是,如果你處理'PreviewTextInput',你應該期望做大量的測試和思考,讓結果以你想要的方式工作。 – 2010-06-23 08:17:30

1

我發現post其中使用附加的屬性。允許您在不重寫代碼的情況下將其用於所有ComboBox。