【问题标题】:WPF ComboBox, force input to UpperCaseWPF ComboBox,强制输入大写
【发布时间】:2010-06-22 10:49:31
【问题描述】:

我有一个带有 TextSearchEnabled 的可编辑 WPF 组合框。当用户键入以过滤 ComboBox 时,我需要强制用户的文本输入为大写。

我正在考虑修改作为控件一部分的文本框(名为“PART_EditableTextBox”)以设置 CharacterCasing="Upper",但我不太清楚如何做到这一点。

我是否需要使用触发器,或以某种方式修改模板?

【问题讨论】:

    标签: wpf combobox uppercase


    【解决方案1】:

    这可行,似乎是一个合理的解决方案:

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

    确保组合框在加载时未折叠,否则将找不到模板。

    【讨论】:

    • 我使用的是组合框名称,而不是“comboBox”和“cbObservation”
    【解决方案2】:

    IMO,更快的方法是将 UpdateTrigger 设置为 PropertyChanged,并在数据对象中,在更新时将值大写。

    【讨论】:

      【解决方案3】:

      我发现post 使用了附加属性。允许在不重写代码的情况下将其用于所有 ComboBox。

      【讨论】:

        【解决方案4】:
        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

        【讨论】:

        • 我相信这段代码会从输入中去除所有大写字符。
        • @Robert Rossney:我不这么认为。仅当字符较小时,才会将其转换为大写并显式附加到文本框,并且进一步处理为假。如果是upper,则根本不处理。
        • 好吧,我不会破坏你的惊喜,但你应该测试一下。它没有做我期望它做的事情,但它也没有做你期望它做的事情。我从这个练习中得出的结论是,如果你处理PreviewTextInput,你应该期望必须做大量的测试和思考才能让结果以你想要的方式工作。
        • @Robert Rossney:我这里没有 IDE。也许你是对的。我应该测试一下。但是,如果您已经对其进行了测试,您能否告诉我这里出了什么问题,以便我修复它。否则我回家时会这样做:)
        • 嗯,这有点难以解释。有几个问题,都与插入点有关。插入符号可能不在文本的末尾,但这总是放置字符的位置。所以这是个问题。一个更令人困惑的问题是,处理PreviewTextInput 不仅会阻止字符正常添加到Text,还会阻止插入符号正常前进。因此,如果您将插入符号放在 TextBox and type abCd, it will contain CABD` 中,插入符号将位于 C 和 A 之间。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 2018-05-31
        • 2018-10-01
        • 1970-01-01
        相关资源
        最近更新 更多