我有一个 TextBox
我绑定(bind)了一个字符串,如果我现在手动编辑文本,我将能够通过 TextBox.Undo()
撤消这些更改,但是如果我更改了字符串并且更新了 TextBox 的文本,我将无法撤消这些更改并且 TextBox.CanUndo
属性将始终为 false
.
我想这可能与完全替换文本而不是修改它有关。
关于如何让它发挥作用的任何想法?
最佳答案
我遇到了同样的问题(需要在 Enter 时接受输入并在 Escape 时恢复为原始值)并且能够以这种方式处理它:
UpdateSourceTrigger
您的TextBox.Text
绑定(bind)到 Explicit
. KeyDown
TextBox 的事件并将以下代码放入其中: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
}
}
我发现这个解决方案非常优雅,因为它也可以在 DataTemplates 中使用。例如,在我的例子中,我使用它来允许对 ListBox 项目进行就地编辑。
关于wpf - 如何撤消由绑定(bind)引起的 TextBox 的文本更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476282/