删除 WPF 的 TabControl 中的重复代码

Remove duplicate code in WPF's TabControl

删除 XAML 代码中的重复代码时遇到问题。

示例:

<TabControl x:Name="TabControl">

    <TabItem Header="1">
        <TabItem.Content>
            <GridView x:Name="GridView1">
                ...
            </GridView>
        </TabItem.Content>
    </TabItem>
    
    <TabItem Header="2">
        <TabItem.Content>
            <GridView x:Name="GridView2">
                ...
            </GridView>
        </TabItem.Content>
    </TabItem>
</TabControl>

选项卡的内容相同,除了 GridView 控件的名称。

我需要通过 XAML 静态创建选项卡,以便在代码隐藏中访问 GridView。

有没有办法将 TabItems 的内容保存在一个地方,以便它可以用于两个 TabItems,但保留在代码隐藏中分别访问两个 GridView 的可能性?

如果您指的是整个 GridView 内容,您可以像创建表单一样创建自己的控件。但不是

<Window x:Class...
   other xmlns stuff of window >
   [actual content within]
</Window>

只需创建一个包含您的 gridview 内容的文件,例如

<GridView x:Class="classNameOfThisControl"
   other xmlsns stuff like that of Window >
  [content within the gridview]
</GridView>

然后,在您复制的选项卡控件中,您可以添加此自定义 xaml 内容

<TabControl x:Name="TabControl">
    <TabItem Header="1">
        <TabItem.Content>
            <local:classNameOfThisControl x:Name="GridView1"/>
        </TabItem.Content>
    </TabItem>
    
    <TabItem Header="2">
        <TabItem.Content>
            <local:classNameOfThisControl x:Name="GridView2"/>
        </TabItem.Content>
    </TabItem>
</TabControl>

您在现有项目中看到的“本地”上下文基本上是您自己的项目和在上一步中创建的 class 名称的上下文。很多可以在多个地方得到 re-used 的东西我都是这样做的。想象一个需要姓名和地址的应用程序。为什么要重新创建 20 次。声明相同的网格上下文、列对齐、文本输入等,并在该级别和内部部分分配任何绑定上下文(提供相同的绑定 属性 名称上下文),它可以顺利运行。 HTH

意见反馈

如果您的 [GridView] 更完整并且每个实例都有多个控件并且您想明确了解其中的控件,您仍然可以使用部件的 x:Name 上下文,但您首先需要获取第一个实例 gridview 名称,然后查找其中其他控件的部分。因为 GridView1.SomeTextbox 与 IT 中的 GridView1.SomeTextbox 明显不同。说得通?如果您可以编辑您现有的 post 并且可能提供更多关于您正在尝试做的事情的上下文,可能有助于增加说明。

另一种方法可能是使用某些属性创建您自己的自定义 class,并将这些属性的上下文绑定到知道您的自定义 class 的 pre-defined TEMPLATE/STYLE ] 及其相关的可绑定属性,但这比你现在所处的位置要多一​​些。