Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF文本框文本强制_Wpf_Textbox_Wpf Controls_Dependency Properties_Trim - Fatal编程技术网

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

我必须实现WPF文本框,它将通过绑定提供修剪过的文本。 乍一看,这项任务对我来说相当简单。我决定使用依赖属性值强制。下面我写了我的代码,但这似乎不起作用。我的绑定属性中没有修剪字符串。我做错了什么?也许我应该采取另一种方法

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