键入时可以替换文本框中的字符吗?

Mar*_*eIV 10 wpf textbox input

我们正在寻找一种方法来使文本框替换某些字符作为其中的人物类型.注意,我们专注于控件本身,而不是绑定,视图模型等.为了这个问题,假设有一个窗口,文本框位于其中间,没有别的.没有数据,没有视图模型,没有绑定等.

我已经更新了这个问题,因为看起来下面的所有答案都集中在绑定,依赖属性,coersion等等.虽然我很欣赏这些建议,但如上所述,我们的控制不是绑定控件,所以它们不适用.

现在虽然我可以解释原因,但这会使这篇文章的篇幅延长五倍,因为它实际上是一个复杂而高级的用例,但这与问题本身无关,这就是为什么我简化了我们的场景下面关注我们试图解决的具体问题,这是关于文本框控件,或者可能是在键入时替换字符的子类.

希望现在更有意义.

Eli*_*bel 17

完成此任务的最佳方法是使用该TextChanged事件:

    private void OnTextChanged(object sender, TextChangedEventArgs e)
    {
        var tb = (TextBox)sender;
        using (tb.DeclareChangeBlock())
        {
            foreach (var c in e.Changes)
            {
                if (c.AddedLength == 0) continue;
                tb.Select(c.Offset, c.AddedLength);
                if (tb.SelectedText.Contains(' '))
                {
                    tb.SelectedText = tb.SelectedText.Replace(' ', '_');
                }
                tb.Select(c.Offset + c.AddedLength, 0);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这有几个好处:

  • 你不是每次都经历整个字符串,只是更换的部分
  • 它在撤消管理器和粘贴文本方面表现良好
  • 您可以轻松地将其封装到附加属性中,该属性可以应用于任何文本框