2012-03-15 180 views
1

有一个按钮是用下面的代码以编程方式点击,但它保持聚焦(我不知道与术语,虽然)。我怎样才能摆脱这一点?失去焦点的按钮

afterbefore

private void txt_addRemove_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Return) 
    { 
     btn_BC_add.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));     
    } 
} 
+0

您提供了两张图像。他们有什么用途?举办活动之前和之后?我认为他们不可能!你期望的结果是什么?提升事件而不对焦按钮?提高点击事件与焦点变化无关。 – 2012-03-15 20:12:12

回答

2

除了一个事实,即真的有线调用ButtonClick。你应该相反,至少定义Command,其关联到一个按钮,并从该代码呼叫RaiseEvent,但调用关联到该按钮Command。在实践中你可以调用一个函数。

重点是什么,应该足以明确地将焦点设置为您的视图上的其他控件。

希望这会有所帮助。

+0

你能举个例子吗? – Shibli 2012-03-15 20:58:13

0

这里有很多方法可以做到你想要什么得当,是一个:

这是最好的设置UpdateSourceTriggerPropertyChanged并使用Command绑定Enter键。这应该与Button绑定的命令相同(因此将您的业务逻辑移至视图模型层)。


另外,如果这是你的表单上唯一的按钮,你可以设置IsDefault属性为true(你还是想设置的UpdateSourceTriggerPropertyChanged)。

0

您可以使用TraversalRequest ClassMoveFocus或明确将您的Focus设置为另一个元素。

btn_BC_add.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 

以防万一,你的按钮是最后的焦点顺序,你可以尝试其他FocusNavigationDirection选项,例如上,首先,最后,左,右,上,下, 。

+0

它不起作用 – Shibli 2012-03-15 20:58:26

+0

@Shibli正如MD.Unicorn在他的评论中所说的,程序性点击的行为不会将焦点设置到您的按钮上。您需要确定设置焦点的位置/内容。尝试添加一个GotFocus事件到你的按钮并设置一个断点。然后您可以使用 L列出您的调用堆栈以确定按钮的设置焦点。 – 2012-03-16 00:08:58