2011-09-09 22 views
6

私のWPFアプリケーションでは、DataSetからバインドされたデータを表示するメインフォームにListViewがあります。ユーザーがListView内の行をダブルクリックすると、詳細ウィンドウが開きます。私のXAMLで新しいWPFウィンドウは、元のウィンドウの下にのみ表示されます

は、私は、リストビューをダブルクリックハンドラを作成するためのスタイルを使用:コードビハインドで

<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に設定されています。私もウィンドウタイトルがなく、ウィンドウはタスクバーに表示されません。これを理解しようとすると、WindowStyleSingleBorderWindowに設定しようとしましたが、同じ問題が発生しますが、詳細ウィンドウが描画されているときに詳細ウィンドウの境界線がメインフォームの上に表示され、メインフォーム。詳細ウィンドウが表示された後、私のダブルクリックハンドラが本質的にメインフォームを前面に引っ張ってくれますか?

答えて

8

あなたがイベントを処理したことをイベントルーティングシステムに伝えていないようです。 WPFにイベントの処理を許可しないようにするには、e.Handledをtrueに設定してみてください。 Handledプロパティがイベントルーティングを変更する方法の詳細については、およびMarking Routed Events as Handled, and Class Handlingを参照してください。

+2

これは、ダブルクリックハンドラの先頭に 'e.Handled = true; 'を追加すると、すべてのウィンドウが期待どおりに機能するようになりました。ありがとう! –

+2

あなたは私を救った!私のクライアントはダブルクリックがウィンドウを開いて隠していると不平を言っていました。何百回もありがとう! –

関連する問題