我的应用程序实现了一个简单的计算链,就像电子表格一样。它有一个TextBox
,用户可以在其中键入一些数值,一旦编辑,代码就会继续更新所有相关字段。
我很少使用TextBox
的经验告诉我,每次用户单击角色时都会触发一个事件。这种行为是不好的:假设这个人键入值"1234":计算链将为"1"执行,接下来为"12"执行,然后为"123"执行,最后为"1234"执行。
我需要一种方法来知道剪辑什么时候结束。输入后,矩形可能会变成蓝色,就像DataGrid
中的矩形一样。用户应该可以使用Tab键或单击其他位置离开。
此外:空的TextBox与包含零不是一回事!空TextBox的内容应被识别为未定义。
问题是:我需要什么样的控制和辅助功能?
TIA。
听起来您只想在TextBox具有LostFocus时执行计算
在你看来,你会有
<Window...>
<TextBox LostFocus="Perform_Calculation"/>
</Window>
然后在你的代码后面定义方法
private void Perform_Calculation(object sender, RoutedEventArgs e)
{
// calculation logic here...
// probably also where you will check if the Text is empty (nothing to be done)
}
或者,您可以使用TwoWay绑定,TextBox上的默认PropertyChangeTrigger应为LostFocus,因此只有当用户离开TextBox时,您才能获得属性更新。
请注意,这不会满足您在按下Enter时处理它的希望,因为TextBox仍将具有焦点。要启用此功能,请稍微扩展
<Window...>
<TextBox LostFocus="Perform_Calculation" KeyDown="TextBox_KeyDown"/>
</Window>
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
// perform calculation here (probably method that you will also call
// from LostFocus handler to avoid duplication)
}
}