6

私のWPFアプリケーションでは、メインフォームにDataSetからのバインドされたデータを表示する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)を設定すると、メインフォームの上に詳細ウィンドウが開きますが、メインフォームが詳細ウィンドウの前に表示されることはありません。

displayedCards[row].Activate()期待どおりに機能し、その詳細ウィンドウを他のすべての詳細ウィンドウの前面に表示しますが、上記と同じ問題の犠牲になります。メインウィンドウの前面には表示されません。

私が達成したいのは、メインウィンドウと同じレベル/レイヤー(/ zオーダー?)に詳細ウィンドウを配置して、両方を重ねて表示できるようにし、詳細ウィンドウを上に表示することです。それらが開かれたときのメインフォーム。

編集:重要な場合、詳細ウィンドウには何も表示されずWindowStyleAllowsTransparencytrueに設定されます。また、ウィンドウのタイトルがなく、ウィンドウがタスクバーに表示されません。これを理解しようとすると、に設定しようとしましたWindowStyleSingleBorderWindow、同じ問題が発生しますが、詳細ウィンドウが描画されているときに詳細ウィンドウの境界がメインフォームの上に表示され、メインの後ろに押し出されます。形。詳細ウィンドウが表示された後、ダブルクリックハンドラーは基本的にメインフォームを前面に引っ張っていますか?

4

1 に答える 1

8

イベントを処理したことをイベントルーティングシステムに通知していないようです。trueに設定e.Handledして、イベントのそれ以上の処理を許可しないようにWPFに指示してみてください。Handledプロパティがイベントルーティングを変更する方法の詳細については、RoutedEventArgs.Handledプロパティと、ルーティングされたイベントをHandledとしてマークする、およびクラスの処理を参照してください。

于 2011-09-09T17:07:25.937 に答える