2013-12-15 27 views
0

我的应用程序按照电子表格的规定实现了简单的计算链。它有一个TextBox,用户输入一些数字值,并且一旦编辑编辑,代码继续更新所有依赖字段。WPF:需要文本框以具有DataGrid单元格的某些高级功能

我对TextBox的经验告诉我,每次用户点击一个角色时都会触发一个事件。这种行为不好:假设人类输入值“1234”:计算链将执行“1”,接下来执行“12”,然后执行“123”,最后执行“1234”。

我需要一种方法来知道编辑何时结束。也许这个矩形可能会变成蓝色输入,就像DataGrid中的那些一样。用户应该能够使用标签键或通过点击其他地方。

另外:一个空的TextBox与包含一个零不是一回事!一个空的TextBox的内容应该被识别为未定义的。

那么问题是:我需要什么样的控制和辅助功能?

TIA。

回答

1

这听起来像你只是想执行你的计算时文本框引发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绑定和th e default PropertyChangeTrigger on TextBox应该是LostFocus - 所以你应该只在用户离开TextBox的时候得到属性更新。

注意,这将无法满足的也处理得上的按Enter键你的希望,为文本框将仍然具有焦点。若要启用此功能,请稍微扩展它

<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) 
    } 
} 
+0

我猜用户将无法通过按来结束编辑? –

+1

应该更新答案以提供此功能的扩展。 –

相关问题