我有一个WPF应用,当用户将主窗口拖动到角落时,我想将其主窗口捕捉到屏幕的左上角。
我写了几行代码来实现这一目标。
private void Window_LocationChanged(object sender, EventArgs e)
{
if (Left < 10 && Top < 10)
{
Top = 0;
Left = 0;
}
}
基本上,当主窗口接近屏幕的左上角时,主窗口会自动将其自身调整为0、0位置。
它正在按预期方式工作,但是看起来并不漂亮,因为当主窗口足够接近以触发事件时,它会闪烁。我试图将事件更改为在鼠标左键向上移动时启动,但看来当标题栏被抓住时,应用无法检测到鼠标按钮的状态。
您有什么建议使窗口在拐角处不跳来跳去?
编辑:一旦窗口靠近角落,我试图抬起鼠标左键,但是一旦窗口被卡住,我就无法将其从角落移开,这使解决方案无法使用。另外,如果这是我一直在寻找的解决方案,则可以在加载应用程序开始时将窗口锁定到角落。
答案 0 :(得分:0)
您可以使用本机mouse_event
函数释放鼠标捕获。
您还应该确保您不处理捕捉窗口时引发的LocationChanged
事件。您可以为此使用Boolean
标志:
public partial class Window1 : Window
{
private const uint MOUSEEVENTF_LEFTUP = 0x04;
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, UIntPtr dwExtraInfo);
public Window1()
{
InitializeComponent();
LocationChanged += Window_LocationChanged;
}
private bool _handle = true;
private void Window_LocationChanged(object sender, EventArgs e)
{
if (_handle && Left < 100 && Top < 100)
{
_handle = false;
mouse_event(MOUSEEVENTF_LEFTUP, 50, 50, 0, UIntPtr.Zero);
Top = 0;
Left = 0;
_handle = true;
}
}
}