2012-03-15 228 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