在我的WPF應用程序中,我在主窗體上顯示了一個ListView,該窗體顯示來自DataSet的綁定數據。當用戶雙擊ListView中的一行時,它將打開一個詳細信息窗口。新的WPF窗口只在原始窗口下面顯示
在我的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。我也沒有窗口標題,窗口也沒有出現在任務欄中。當試圖解決這個問題時,我嘗試將WindowStyle
設置爲SingleBorderWindow
,並且出現了相同的問題,除了細節窗口的邊框顯示在主窗體的頂部,因爲正在繪製細節窗口,然後它被推到後面主要形式。在顯示詳細信息窗口後,我的雙擊處理程序是否可以將主窗體拉到最前面?
這就是它 - 在我的雙擊處理程序的開始處添加'e.Handled = true;'現在使所有窗口的功能如我所料。謝謝! –
你救了我!幾個月我的客戶抱怨說,雙擊打開並隱藏他們的窗戶。謝謝你一百遍! –