H.B*_*.B. 4 wpf binding textbox wpf-controls
我有一个TextBox我绑定一个字符串,如果我现在手动编辑文本我将能够通过撤消这些更改TextBox.Undo(),如果我更改字符串和TextBox的文本更新,我无法撤消这些更改,该TextBox.CanUndo属性将始终是false.
我想这可能与完全替换文本而不是修改它有关.
关于如何让这个工作的任何想法?
好的,开始发表评论并意识到这是一个答案:)
TextBox.Undo()旨在撤消用户与文本框的交互,而不是对其绑定的属性进行值更改.文本框绑定的属性更改只会更新TextBox的值,这与用户通过焦点/键盘编辑的更改不同.如果需要撤消对绑定属性的更改,则可能需要调查向应用程序添加撤消/重做堆栈.
我面临同样的问题(需要接受输入Enter并恢复到原始值Escape)并且能够以这种方式处理它:
UpdateSourceTrigger你TextBox.Text绑定的集合Explicit.处理KeyDownTextBox的事件并将以下代码放在其中:
if (e.Key == Key.Enter || e.Key == Key.Escape)
{
BindingExpression be = ((TextBox)sender).GetBindingExpression(TextBox.TextProperty);
if (e.Key == Key.Enter)
{
if (be != null) be.UpdateSource();
}
else if (e.Key == Key.Escape)
{
if (be != null) be.UpdateTarget(); //cancels newly supplied value and reverts to the original value
}
}
Run Code Online (Sandbox Code Playgroud)我发现这个解决方案非常优雅,因为它也可以在DataTemplates中使用.例如,在我的情况下,我使用它来允许ListBox项目的就地编辑.
小智 5
直接分配给TextBox:
textBox.SelectAll();
textBox.SelectedText = newText;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13119 次 |
| 最近记录: |