【问题标题】:XAML Inheritance (not code-behind)XAML 继承(非代码隐藏)
【发布时间】:2012-07-05 14:35:16
【问题描述】:

XAML继承是如何实现的?

是否只能继承代码隐藏而不是 .xaml (related question)?将父级包含在子控件的命名空间中是唯一的方法吗?

XAML 中似乎没有一般的“继承”。有questions关于继承UserControl等,但没有一般继承

问题:

我有 2 个 xaml 文件,File1.xamlFile2.xaml,它们非常相似。我可以创建一个SuperFile.xaml 并将以下大部分代码放入其中吗?

<UserControl ... >
    <Grid>
        <Grid.RowDefinitions ... />

        <DockPanel ... >
            <ToolBar ... >
                <!-- Some Buttons here:
                     File1.xaml to contain the Buttons "View" and "Export"
                     File2.xaml to contain the Buttons "Edit" and "Delete"
                 -->
            </ToolBar>
        </DockPanel>

        <igDP:XamDataGrid MouseDoubleClick="xamDataGrid1_MouseDoubleClick" ... />
    </Grid>
</UserControl>

File1.xamlFile2.xaml 中唯一不同的地方是:

  1. Buttons 在ToolBar 中(见代码中的注释)
  2. XamDataGrid属性,主要是事件(它们在每种情况下的作用)。

我怎样才能做到这一点?我是否必须分别为两个孩子编写代码隐藏文件?

【问题讨论】:

  • 你真的需要继承,还是只是重用同一个类并有一个标志来表明你处于哪种模式?
  • @JoelLucsy 如果只是两个文件的“事件”不同,我可以这样做。如果我使用相同的 xaml,我将如何拥有不同的 Buttons? flag 甚至可以在 xaml 中使用吗?
  • 当然,将按钮的 Visibility 属性绑定到按钮。您必须使用转换器从 bool 更改为 Visibility 枚举,但有很多这样的例子。
  • @JoelLucsy 我想你的建议在这种情况下会奏效,但我会采用ResourceDictionary 的方式,因为它会帮助我理解如何使用它(至少对于将来的使用) -案子)。谢谢!

标签: c# .net wpf xaml inheritance


【解决方案1】:

您可以使用ResourceDictionary

将所有通用模板和样式放入ResourceDictionary,然后让UserControls 都导入ResourceDictionary

<UserControl.Resources>
    <ResourceDictionary Source="BaseStylesAndTemplates.xaml" />
</UserControl.Resources>

【讨论】:

  • 谢谢!通过遵循这种方法,我能否在 2 个子 XAML 中嵌入不同的 Buttons 集?例如,File1.xaml 应该在ToolBar 中有Buttons“查看”和“导出”,File2.xaml 应该有Buttons“编辑”和“删除”。请参阅问题中的编辑。
  • @maelstrom3 我不明白你为什么不能这样做。您的基本样式将全部从ResourceDictionary 中提取,而您的各个组件(例如按钮)将在您的个人UserControls 中定义
  • 我对 WPF 的经验并不丰富,因此还没有使用过 Styles。所以,我会相信你的话 :) 并尝试一下。
  • 我得到了部分工作。我在 SuperFile.xaml 中有一个 DataTemplate,我将其应用于 File1.xaml 中的 ContentControl。但是,如何将Buttons 添加到DataTemplate-生成的元素ToolBar?请参阅问题中的 code-sn-p,了解 SuperFile.xaml 的外观。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 2012-02-13
  • 2016-01-20
相关资源
最近更新 更多