WPF扩展窗口

时间:2011-01-21 20:46:02

标签: wpf inheritance window

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

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

2 个答案:

答案 0 :(得分: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命令创建处理程序。更好的是,如果您使用的是视图模型,则可以绑定到您的命令。

答案 1 :(得分:0)

创建自己的Window类,名为PrintableWindow,派生自。{ Window然后修改任何其他Window个实例,以便从PrintableWindowWindow派生。这样,所有Window个实例都属于PrintableWindow类型,其中包含ContextMenu和与之关联的处理程序。