我最近收到一个要求,即我的应用程序中的所有文本框应在离开文本框时自动修剪文本。我不能/不想通过向每个文本框添加转换器或事件,或者通过在 View 模型中为每个绑定(bind)编写/重写属性来实现此目的。首先,这将非常困惑和重复,其次,我已经为我的许多文本框提供了转换器,而且据我所知,如果不编写多转换器,您就无法连接多个转换器。
由于您无法在每次击键时应用修剪,因此修剪必须在未聚焦事件之后但在对我的 View 模型进行绑定(bind)操作之前进行。
执行此操作的最佳方法是什么?编写我自己的文本框类?某种控制模板/触发器?我对这些选项不够熟悉,不知道哪条路径最简单。
我已经在 App.xaml 中为所有文本框设置了样式,当 IsReadOnly 设置为 true 时,这使得它们看起来像 IsEnabled=false,因此这可能会使事情变得复杂。
最佳答案
好的,我得到了一个很好的解决方案,这是我非常简单的解决方案:
我添加了自己的控件,该控件继承自 TextBox、TrimmedTextBox。构造函数:
public TrimmedTextBox()
{
InitializeComponent();
LostFocus += TrimmedTextBox_LostFocus;
}
private void TrimmedTextBox_LostFocus(object sender, RoutedEventArgs e)
{
Text = Text.Trim();
}
这是在绑定(bind)完成其工作之前触发的,因此保存到我的属性中的实际上是修剪后的值。
我还必须在所有样式中添加修改,其中 TargetType=TextBox 当然。
关于c# - WPF:修剪所有文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33890727/