2011-09-09 100 views
6

在我的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順序?)上,以便兩者都可以相互重疊顯示,並使細節窗口顯示在打開主窗體的頂部。

編輯:如果是重要的,細節窗口沒有WindowStyleAllowsTransparency設置爲true。我也沒有窗口標題,窗口也沒有出現在任務欄中。當試圖解決這個問題時,我嘗試將WindowStyle設置爲SingleBorderWindow,並且出現了相同的問題,除了細節窗口的邊框顯示在主窗體的頂部,因爲正在繪製細節窗口,然後它被推到後面主要形式。在顯示詳細信息窗口後,我的雙擊處理程序是否可以將主窗體拉到最前面?

回答

8

看起來你並沒有告訴事件路由系統你已經處理了事件。嘗試將e.Handled設置爲true,以通知WPF不允許對事件進行任何進一步處理。有關Handled屬性如何更改事件路由的更多信息,請參閱RoutedEventArgs.Handled PropertyMarking Routed Events as Handled, and Class Handling

+2

這就是它 - 在我的雙擊處理程序的開始處添加'e.Handled = true;'現在使所有窗口的功能如我所料。謝謝! –

+2

你救了我!幾個月我的客戶抱怨說,雙擊打開並隱藏他們的窗戶。謝謝你一百遍! –