WPF文本框文本强制
我必须实现WPF文本框,它将通过绑定提供修剪过的文本。 乍一看,这项任务对我来说相当简单。我决定使用依赖属性值强制。下面我写了我的代码,但这似乎不起作用。我的绑定属性中没有修剪字符串。我做错了什么?也许我应该采取另一种方法WPF文本框文本强制,wpf,textbox,wpf-controls,dependency-properties,trim,Wpf,Textbox,Wpf Controls,Dependency Properties,Trim,我必须实现WPF文本框,它将通过绑定提供修剪过的文本。 乍一看,这项任务对我来说相当简单。我决定使用依赖属性值强制。下面我写了我的代码,但这似乎不起作用。我的绑定属性中没有修剪字符串。我做错了什么?也许我应该采取另一种方法 public class MyTextBox : TextBox { static MyTextBox() { TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkProp
public class MyTextBox : TextBox
{
static MyTextBox()
{
TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(string.Empty, null, new CoerceValueCallback(CoerceText)));
}
private static object CoerceText(DependencyObject d, object basevalue)
{
string s = basevalue as string;
if(s != null)
{
return s.Trim();
}
else
{
return string.Empty;
}
}
}
我将简单窗口添加到我的应用程序中进行测试。
Xaml:
奇怪的是,值强制不适合绑定 讨论相同的问题,并提出一个或两个解决方法。 其中之一是显式调用TextBox的绑定表达式上的
UpdateTarget()
:
textBox1.GetBindingExpression(MyTextBox.TextProperty).UpdateTarget();
我觉得很好。MyTextBox的文本属性值不会在开头或结尾包含空格。你到底想完成什么?我添加了测试应用程序的代码。MessageBox显示未修剪的文本。好的,这似乎是一个解决方案,但何时调用UpdateTarget?除了在XAML中声明绑定外,我的文本框不需要程序员执行任何其他操作。。。在您的强制文本()函数中>设置完编辑的值后,立即调用UpdateTarget()
public partial class MainWindow : Window
{
private string _text;
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public string Text
{
get { return _text; }
set
{
_text = value;
MessageBox.Show(string.Format("|{0}|", _text));
}
}
}
textBox1.GetBindingExpression(MyTextBox.TextProperty).UpdateTarget();