代码之家  ›  专栏  ›  技术社区  ›  Xander

如何自动覆盖文本框

  •  2
  • Xander  · 技术社区  · 14 年前

    当用户在Silverlight的文本框中键入字母时,如何将这些字母改为全大写?同时,还会触发所有相同的事件,如按键。

    3 回复  |  直到 14 年前
        1
  •  1
  •   iCollect.it Ltd    14 年前

    如果您希望避免代码隐藏或自定义控件(首选),那么可以通过行为来使用这类功能。

    例如这个 in the Expression blend Gallery 将附加到的任何文本框转换为大写。

    然后就是混合中的拖放或在VS2010中手动添加触发器。

        2
  •  1
  •   Xander    14 年前

    除了使用嵌入的全大写字体之外,没有什么简单的方法可以做到这一点。所有其他方式都会干扰文本框的工作方式。

        3
  •  0
  •   Shimmy Weitzhandler 500 - Internal Server Error    14 年前

    最简单的方法是:

    private void tb_TextChanged(object sender, TextChangedEventArgs e)
    {
      var tb = (TextBox)sender;
      var caret = tb.CaretIndex;
      tb.Text = tb.Text.ToUpper();
      tb.CaretIndex = caret;
    }
    

    如果您想节省更多的性能,请改为处理LostFocus事件(这样您也不必担心Carret位置):

    private void tb_LostFocus(object sender, RoutedEventArgs e)
    {
      var tb = (TextBox)sender;
      tb.Text = tb.Text.ToUpper();
    }
    

    但如果数据绑定到模型/实体,我将调用 ToUpper() 在绑定对象属性setter上/ OnPropertyChanged , OnTextChanged 或实体中的任何内容。