2017-02-28 56 views
1

(如在「Focus();」代碼說法相反),我將如何去這樣做呢?銷燬/如果我想只是刪除焦點從東西完全徹底移除焦點編程

示例場景:我KeyboardFocusing一個按鈕,使用onclick事件,我只想說:「移除焦點從此元素」。

+0

約對焦另一個控制是什麼? – Pikoh

+0

[如何從WinForms中的TextBox中移除焦點?](http://stackoverflow.com/questions/1140250/how-to-remove-the-focus-from-a-textbox-in-winforms) – Pikoh

+0

我之前實際上是在做這個 - 我將重點放在'下一個'控件上,但是這對於純粹的視覺原因並不理想(我的實際目標是立即將按鈕再次聚焦在下一行上(這全部是爲了修復按鈕的動畫流動性中的錯誤的目的))。 與此相關的問題是下一個控件稍微抖動,因爲它在短時間內會相應地獲得焦點和動畫。 理想情況下,我希望重點被摧毀/刪除,但一個快樂的替代方案將只是聚焦最近的父母contentcontrol(視圖的主機),因爲這將不會有任何視覺問題。 – Logan

回答

1

沒有的功能,您可以隨時使用:

Keyboard.ClearFocus();

+0

這已經做到了,你是冠軍,謝謝。 我以前看過這個指令,但不能記住我的生活。 不幸的是,您已經「太快地」回答了我的問題,因此我必須等5分鐘才能將您的答案作爲已接受的答案進行檢查。 – Logan

+1

很高興終於有所幫助。我已經收到了很多幫助,很高興再次回來。 :) – Rawns

0

在windows中總是有一個元素有焦點。所以你不能消除焦點,但你可以轉移到別的東西。您可以將焦點設置到一些與等形式本身

+0

我認爲OP是指避免控制被集中,不確定是否。 – bradbury9

+0

我意識到這一點;到目前爲止,我知道每當焦點被「摧毀」時,它就會像閃電棒一樣跳到主持給定視圖的contentpresenter/contentcontrol,這絕對沒問題。這種重點交流只是暫時的。 – Logan

-1

你可能無法直接刪除焦點,但!你可以將焦點切換到不同的應用程序

[DllImport("USER32.dll")] 
static extern bool SetForegroundWindow (IntPtr hWnd); 

private void SwitchFocusTo(Process diffProcess) 
{ 
    SetForegroundWindow(diffProcess.MainWindowHandle); 
} 
0

在.NET Framework 4中只Keyboard.ClearFocus();

不過,我發現,這並不總是工作...所以,要麼完全放棄焦點切換到其他元素或試試這個代碼:

// Move to a parent that can take the focus 
FrameworkElement parent = (FrameworkElement)yourElement.Parent; 
while (parent != null && parent is IInputElement && ! ((IInputElement)parent).Focusable) 
{ 
    parent = (FrameworkElement)parent.Parent; 
} 

DependencyObject scope = FocusManager.GetFocusScope(yourElement); 
FocusManager.SetFocusedElement(scope, parent as IInputElement);