gpt4 book ai didi

WPF奇怪的双击窗口切换

转载 作者:行者123 更新时间:2023-12-02 04:30:01 24 4
gpt4 key购买 nike

有人知道如何实现双击事件处理程序,以新窗口成为最前面窗口的方式打开新窗口吗? (这只是通常预期的行为)。

在 WPF 中,在双击事件处理程序中打开第二个窗口时,窗口会出现奇怪的行为。第二个窗口打开,但触发双击事件的第一个窗口立即再次激活。在单击事件处理程序中打开一个窗口,按预期工作。第二个窗口打开并仍然是前窗口。

出于演示目的,我创建了以下应用程序。两个窗口类,只有一个按钮控件。为了区分按钮控件上的单击和双击,单击事件仅在按下左 Shift 键时才起作用。

双击后

http://blog.mutter.ch/wp-content/uploads/2014/05/wpf_window1.png

点击后(这也是双击的预期行为)

http://blog.mutter.ch/wp-content/uploads/2014/05/wpf_window2.png

主窗口

<Window x:Class="WpfWindowSwitching.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="600">
<Grid>
<Button Margin="40"
HorizontalAlignment="Center"
VerticalAlignment="Center"
MouseDoubleClick="doubleClick"
Click="click">
<TextBlock FontWeight="Bold"
FontSize="22">
I am the first Window, double click this button...
</TextBlock>
</Button>
</Grid>
</Window>

背后的代码:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void doubleClick(object sender, MouseButtonEventArgs e)
{
openNewWindow();
}

private static void openNewWindow()
{
var window = new SecondWindow();
window.Show();
}

private void click(object sender, RoutedEventArgs e)
{
if (!Keyboard.IsKeyDown(Key.LeftShift)) return;
openNewWindow();
}
}

第二个窗口

<Window x:Class="WpfWindowSwitching.SecondWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SecondWindow" Height="200" Width="600">
<Grid>
<Button Margin="40"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Click="click">
<TextBlock FontWeight="Bold"
FontSize="22">
I am the second Window
</TextBlock>
</Button>
</Grid>
</Window>

背后的代码:

public partial class SecondWindow : Window
{
public SecondWindow()
{
InitializeComponent();
}

private void click(object sender, RoutedEventArgs e)
{
this.Close();
}
}

最佳答案

MouseDoubleClick 事件之后,将引发 MouseUp 事件,并在 MainWindow 上进行处理。因此,辅助窗口会立即激活,并且随着后续事件冒泡,主窗口也会被激活。

如果您不希望这样做,可以通过将 e.Handled 设置为 True 来显式停止事件冒泡 鼠标双击事件后。这样辅助窗口将保持激活状态。

private void doubleClick(object sender, MouseButtonEventArgs e)
{
openNewWindow();
e.Handled = true;
}

关于WPF奇怪的双击窗口切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859271/

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