2011-01-21 140 views
0

所以我在Windows应用程序中有一堆WPF Windows。 我希望每个窗口都有一个包含一个项目的上下文菜单(请参阅下面的代码)。不过,我不想在任何地方复制和粘贴这些代码。我想以某种方式扩展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> 

您必须在窗口创建打印命令的处理程序,如果你想从一个特定的窗口打印。更好的是,如果你使用视图模型,你可以绑定到你的命令。

0

创建自己的Window类称为PrintableWindowWindow派生,然后修改任何其他Window情况下,从PrintableWindow推导与Window。这样,所有Window实例的类型将为PrintableWindow,其中您的ContextMenu和处理程序与其关联。

+0

这似乎几乎不可能! – MadSeb 2011-01-24 20:18:12

+0

这不是“不可能的”,但它似乎很难扩展Window类。 – MadSeb 2011-01-24 20:18:35