2010-11-12 91 views
2

如何使其在Silverlight中将字母输入到文本框中时将其更改为所有大写字母?同时还会触发所有相同的事件,如按键。如何自动限制文本框

回答

1

有没有简单的方法来做到这一点,除了使用嵌入的全部大写字体。所有其他方式干扰文本框的工作方式。

0

最简单的方法是:

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(); 
} 

但是,如果数据绑定到模型/实体,我会在绑定的对象属性设置器/ OnPropertyChanged,OnTextChanged或实体中的任何对象上调用ToUpper()

1

如果你想避免后面的代码或自定义控件(最好),这种功能可以通过行为来实现。

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

然后,只需在Blend中拖放或在VS2010中手动添加触发器即可。