WPF扩展窗口

WPF扩展窗口,wpf,inheritance,window,Wpf,Inheritance,Window,所以我的Windows应用程序中有一堆WPF窗口。 我希望每个窗口都有一个包含一个项目的上下文菜单(参见下面的代码)。但是,我不想到处复制和粘贴这些代码。我想以某种方式扩展WPF窗口类(称之为PrintableWindow),并以某种方式使每个窗口都成为PrintableWindow的扩展…这可能吗 <Window.ContextMenu> <ContextMenu> <ContextMenu.Items> &l

所以我的Windows应用程序中有一堆WPF窗口。 我希望每个窗口都有一个包含一个项目的上下文菜单(参见下面的代码)。但是,我不想到处复制和粘贴这些代码。我想以某种方式扩展WPF窗口类(称之为PrintableWindow),并以某种方式使每个窗口都成为PrintableWindow的扩展…这可能吗

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

创建自己的
窗口
类,名为
可打印窗口
,该类派生自
窗口
,然后修改任何其他
窗口
实例,以从您的
可打印窗口
窗口
派生。这样,所有的
窗口
实例都将是
可打印窗口
类型,其中包含您的
上下文菜单
和与之关联的处理程序。

您不需要扩展窗口来完成此操作,只需为所有窗口创建一个全局样式即可

在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命令创建一个处理程序。更好的是,如果您使用的是视图模型,您可以只绑定到命令。

我只想添加,您需要为窗口样式设置x:Key属性,并为每个窗口显式指定样式。这是一个已知的问题,窗口不会根据TargetType自动从应用程序资源中选择样式。这似乎几乎是不可能的!虽然不是“不可能”,但扩展Window类似乎非常困难。回填已经完成的代码需要进行重构,但一旦你被“抓住”了,我不确定困难在哪里出现?