以编程方式销毁/完全删除焦点

时间:2017-02-28 15:18:23

标签: c# .net wpf xaml

如果我想完全从某些内容中删除焦点(就像在代码中说" Focus();"相反),我该如何去做呢?

示例场景:我使用键盘聚焦按钮并使用onclick事件,我只想说"从此元素中移除焦点"。

5 个答案:

答案 0 :(得分:1)

您可以随时使用:

Keyboard.ClearFocus();

答案 1 :(得分:0)

答案 2 :(得分:0)

在Windows中,一个元素总是有焦点。因此,您无法移除焦点,但您可以将其转移到其他位置。您可以将焦点设置为没有像表单本身那样的功能的东西

答案 3 :(得分: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);

答案 4 :(得分:-1)

你可能无法直接删除焦点但是!您可以将焦点切换到其他应用程序

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

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