在我的 WPF 应用程序中,我在主窗体上有一个 ListView,它显示来自 DataSet 的绑定数据。当用户双击 ListView 中的一行时,它会打开一个详细信息窗口。
在我的 XAML 中,我使用一种样式在列表视图上创建双击处理程序:
<Style x:Key="ListViewDoubleClick" TargetType="{x:Type ListViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
</Style>
...
<ListView Name="searchResults" ItemContainerStyle="{StaticResource ListViewDoubleClick}>
在代码隐藏中,我有一个字典,它跟踪打开的详细信息窗口(一次可以打开多个),这样如果一个详细信息窗口已经打开,它就会被带到前面。我像这样处理双击:
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();
}
}
我的问题是,使用上面的代码,详细信息窗口在主窗体后面打开。window.Owner = this
如果我设置了所有者信息(
正如我所期望的displayedCards[row].Activate()
那样工作,将该详细信息窗口带到所有其他详细信息窗口的前面,但它成为与上述相同问题的受害者 - 它没有出现在主窗口前面。
我想要完成的是让细节窗口与主窗口位于同一级别/层(/z 顺序?),以便两者可以相互叠加,并让细节窗口显示在主窗口的顶部打开时的主窗体。
编辑:如果它很重要,详细信息窗口没有WindowStyle
并AllowsTransparency
设置为 true。我也没有窗口标题,窗口也没有出现在任务栏中。当试图弄清楚这一点时,我尝试将 to 设置WindowStyle
为SingleBorderWindow
,并且出现了同样的问题,除了在绘制细节窗口时细节窗口的边框显示在主窗体的顶部,然后它被推到主窗体的后面形式。显示详细信息窗口后,我的双击处理程序本质上是否可以将主窗体拉到前面?