gpt4 book ai didi

wpf mousecapture 立即强制释放

转载 作者:行者123 更新时间:2023-12-02 04:07:43 26 4
gpt4 key购买 nike

我正在构建一个包含弹出面板的用户控件。

当我单击按钮打开面板时,我试图捕获鼠标以便我可以检测用户是否单击了弹出面板以便我可以关闭它。

但是在我捕获鼠标之后,我得到了一个丢失的鼠标捕获事件,我无法检测到面板外的点击。

这是我检测到直接打开关闭点击的地方

private void Grid_MouseUP(object sender, MouseButtonEventArgs e)
{
if (indicatorVM != null)
{
if (indicatorVM.SettingsFlyoutVisibility == Visibility.Collapsed)
{
doRelease = false;
indicatorVM.SettingsFlyoutVisibility = Visibility.Visible;
bool result = this.CaptureMouse();
result = Mouse.Capture(this, CaptureMode.SubTree);
}
else
{
doRelease = true;
indicatorVM.SettingsFlyoutVisibility = Visibility.Collapsed;
this.ReleaseMouseCapture();
}
}

}

如果我连接到捕获丢失事件,它会在弹出窗口打开后立即被触发。当我检查结果变量时,无论我如何捕获鼠标,结果都是真实的,所以它似乎工作正常。

有什么想法吗?

最佳答案

首先,在捕获鼠标之前,在将 indicatorVM 的可见性设置为 Visible 之后立即尝试 UpdateLayout。这将避免在捕获鼠标后更改布局,这可能是从您那里窃取捕获的原因。我的第二个建议是使用 Dispatcher Invoke 稍微推迟捕获,如下所示:

Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action)delegate()
{
bool result = this.CaptureMouse();
result = Mouse.Capture(this, CaptureMode.SubTree);
});

捕获将在布局结果之后进行。

关于wpf mousecapture 立即强制释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6715555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com