【发布时间】:2010-05-05 08:12:48
【问题描述】:
我对专注于 WPF 有一点问题。 我想创建一个窗口,总是在顶部,并且永远不会获得焦点(即使我们点击它)。
这是我的解决方案:
public partial class SkinWindow : Window
{
public SkinWindow()
{
InitializeComponent();
Loaded += ( object sender, RoutedEventArgs e ) => SetNoActiveWindow();
}
private void SetNoActiveWindow()
{
WindowInteropHelper helper = new WindowInteropHelper( this );
SetWindowLong( helper.Handle, GWL_EXSTYLE, WS_EX_NOACTIVATE );
LockSetForegroundWindow( LSFW_LOCK );
}
const int GWL_EXSTYLE = -20;
const int WS_EX_NOACTIVATE = 134217728;
const int LSFW_LOCK = 1;
[DllImport( "user32" )]
public static extern bool LockSetForegroundWindow( uint UINT );
[DllImport( "user32" )]
public static extern IntPtr SetWindowLong( IntPtr hWnd, int nIndex, int dwNewLong );
}
第一个问题:它有效,但我必须选择另一个窗口来“移除”我的应用程序的焦点(即使我点击我的窗口也不会再次给出焦点)。 第二个问题:当我移动或调整窗口大小时,修改会在我放下窗口时发生。
您有任何想法/链接/文档吗? 谢谢你:)
【问题讨论】: