新的WPF窗口仅显示在原始窗口下方

Jar*_*ley 6 c# wpf window z-order

在我的WPF应用程序中,我在主窗体上有一个ListView,它显示来自DataSet的绑定数据.当用户双击ListView中的行时,它会打开一个详细信息窗口.

在我的XAML中,我使用样式在listview上创建双击处理程序:

<Style x:Key="ListViewDoubleClick" TargetType="{x:Type ListViewItem}">
    <EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
</Style>
...
<ListView Name="searchResults" ItemContainerStyle="{StaticResource ListViewDoubleClick}>
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中,我有一个跟踪打开的详细信息窗口的字典(多个可以一次打开),这样如果一个细节窗口已经打开,它就会被带到前面.我像这样处理双击:

private void HandleDoubleClick(object sender, MouseEventArgs e)
{
    DataRowView clickedRow = ((ListViewItem)sender).Content as DataRowView;
    int row = (int)clickedRow.Row["ID"];
    if (!displayedCards.ContainsKey(row))
    {
        DetailWindow window = new DetailWindow(RetrieveData(row));
        //window.Owner = this;
        displayedCards.Add(row, window);
        window.Show();
    }
    else
    {
        displayedCards[row].Activate();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,使用上面的代码,在主窗体后面打开详细信息窗口.如果我设置了所有者信息(window.Owner = this),则会在主窗体的顶部打开详细信息窗口,但主窗体永远不会出现在详细信息窗口的前面.

displayedCards[row].Activate()作品如我所料,使这一详细信息窗口中的所有其他细节窗口的前面,但它属于受害者同样的问题上面-它不会在主窗口中名列前茅.

我想要完成的是将详细信息窗口放在与主窗口相同的层/层(/ z顺序?)上,以便两者可以在彼此的顶部显示,并使详细信息窗口显示在打开时的主要形式.

编辑:如果重要,详细信息窗口没有WindowStyle,AllowsTransparency并设置为true.我也没有窗口标题,窗口没有出现在任务栏中.当试图解决这个问题时,我尝试设置WindowStyleSingleBorderWindow,并出现同样的问题,除了详细信息窗口的边框显示在主窗体的顶部,因为正在绘制细节窗口,然后它被推到主要的后面形成.在显示详细信息窗口后,我的双击处理程序是否可以将主窗体拉到前面?

Jos*_*hua 8

您似乎没有告诉事件路由系统您已处理该事件.尝试设置e.Handled为true以告诉WPF不允许进一步处理您的事件.有关Handled属性如何更改事件路由的详细信息,请参阅RoutedEventArgs.Handled属性和将路由事件标记为已处理和类处理.

  • 这就是它做了什么 - 添加`e.Handled = true;`到我的双击处理程序的开头现在使所有的窗口像我预期的那样运行.谢谢! (2认同)
  • 你救了我!几个月我的客户抱怨双击是打开并隐藏他们的窗户.谢谢你一百次! (2认同)