c# - WPF:修剪所有文本框

标签 c# wpf xaml textbox trim

我最近收到一个要求,即我的应用程序中的所有文本框应在离开文本框时自动修剪文本。我不能/不想通过向每个文本框添加转换器或事件,或者通过在 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/

相关文章:

c# - 在另一个程序集中引用 ResourceDictionary

c# - 从客户端访问 WCF 服务的泛型程序

c# - 防止任务在特定线程上运行

c# - 如何在列表中使用 "Contain"?

c# - 流媒体库 FFmpeg、avlib、libav 等

c# - 在 XAML 中为一个事件添加多个事件处理程序?

c# - 如何在单独的线程中打开一个窗口?

c# - Linq:使用不同的 IEnumerable<bool> 过滤列表

c# - Visual Studio 2017 XAML 设计器没有语法突出显示

wpf - 从 WPF 功能区创建下拉 'panel' 区域?