在我的 WPF 应用程序中,主窗体上有一个 ListView,用于显示数据集中的绑定数据。当用户双击 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
),详细信息窗口在主窗体顶部打开,但主窗体永远无法出现在详细信息窗口前面。
The displayedCards[row].Activate()
按我的预期工作,将该详细信息窗口带到所有其他详细信息窗口的前面,但它遇到了与上面相同的问题 - 它没有出现在主窗口前面。
我想要完成的任务是让详细信息窗口与主窗口位于同一级别/层(/z 顺序?),以便两者都可以出现在彼此的顶部,并且让详细信息窗口显示在主窗口的顶部打开时的主窗体。
Edit:如果它很重要,则详细信息窗口没有WindowStyle
and AllowsTransparency
设置为 true。我也没有窗口标题,并且该窗口没有出现在任务栏中。当试图解决这个问题时,我尝试设置WindowStyle
to SingleBorderWindow
,并且会出现同样的问题,只不过在绘制详细信息窗口时,详细信息窗口的边框显示在主窗体的顶部,然后将其推到主窗体后面。在显示详细信息窗口后,我的双击处理程序实际上是否可以将主窗体拉到前面?