2011-01-21 15 views
0

私はWindowsアプリケーションの中にたくさんのWPF Windowsを持っています。 各ウィンドウに1つの項目を持つコンテキストメニューが必要です(コードを参照)。しかし、私はどこにでもこのコードをコピーして貼り付けるような気がしません。私は何とかWPF Windowクラスを拡張して(そしてPrintableWindowと呼ぶ)、何とかすべてのウィンドウをPrintableWindowの拡張にしたいと思っています....これは可能ですか?WPF拡張ウィンドウ

<Window.ContextMenu> 
    <ContextMenu> 
     <ContextMenu.Items> 
      <MenuItem Header="Print" 
         Click="mnuPrint_Click"> 
      </MenuItem> 
     </ContextMenu.Items> 
    </ContextMenu> 
</Window.ContextMenu> 

答えて

1

これを達成するためにウィンドウを拡張する必要はありません。すべてのウィンドウに対してグローバルスタイルを作成しました。あなたのapp.xamlファイルで

<Style TargetType="{x:Type Window}"> 
    <Setter Property="ContextMenu"> 
     <Setter.Value> 
      <ContextMenu> 
       <ContextMenu.Items> 
        <MenuItem Header="Print" Command="Print" /> 
       </ContextMenu.Items> 
      </ContextMenu> 
     </Setter.Value> 
    </Setter> 
</Style> 

あなたが特定のウィンドウから印刷したい場合は、ウィンドウ内のprintコマンドのハンドラを作成する必要があります。さらに、ビューモデルを使用している場合は、コマンドにバインドするだけで済みます。

+0

私は、Windowスタイルのx:Key属性を設定し、各WindowにStyleを明示的に割り当てる必要があることを追加したいだけです。 WindowがTargetTypeによってアプリケーションリソースから自動的にスタイルを選択しないことは、既知の問題です。 –

0

Windowから派生して、Window対あなたのPrintableWindowから派生する他のWindowのインスタンスを変更PrintableWindowと呼ばれる独自のWindowクラスを作成します。このようにしてすべてのWindowインスタンスは、ContextMenuとハンドラが関連付けられたタイプPrintableWindowになります。

+0

これはほとんど不可能です! – MadSeb

+0

でも "不可能"ではありませんが、Windowクラスを拡張するのは非常に難しいようです。 – MadSeb

+0

既に完了しているコードを埋め戻すのはリファクタリングの努力を要しますが、一度「捕まえられる」とすれば、どこに難易度があるのか​​分かりません。 –

関連する問題