C# 如何通过XAML中的样式重用项子项?

C# 如何通过XAML中的样式重用项子项?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个WPF子菜单,我想在XAML中的一些地方重用它。它是八个元素的集合,带有一些复杂的绑定,我不想复制/粘贴这些绑定。但是,在每种情况下,持有者都是不同的:在一个地方,父对象是,在另一个地方,父对象是中的 在我的中,我一直在尝试,但我想我可能走错了方向 为了使其具体化,我正试图减少类似以下内容的代码重复: <Menu> <MenuItem Header="Details" IsCheckable="True" ... /> <MenuIte

我有一个WPF子菜单,我想在XAML中的一些地方重用它。它是八个
元素的集合,带有一些复杂的绑定,我不想复制/粘贴这些绑定。但是,在每种情况下,持有者都是不同的:在一个地方,父对象是
,在另一个地方,父对象是
中的

在我的
中,我一直在尝试
,但我想我可能走错了方向

为了使其具体化,我正试图减少类似以下内容的代码重复:

<Menu>
    <MenuItem Header="Details"    IsCheckable="True" ... />
    <MenuItem Header="List"       IsCheckable="True" ... />
    <MenuItem Header="Thumbnails" IsCheckable="True" ... />
    ...
</Menu>
...
<ContextMenu>
    <MenuItem Header="View">
        <MenuItem Header="Details"    IsCheckable="True" ... />
        <MenuItem Header="List"       IsCheckable="True" ... />
        <MenuItem Header="Thumbnails" IsCheckable="True" ... />
        ...
    </MenuItem>
</ContextMenu>

...
...
...

像这样的东西怎么样:

<Menu>
    <MenuItem Header="Details"    IsCheckable="True" ... />
    <MenuItem Header="List"       IsCheckable="True" ... />
    <MenuItem Header="Thumbnails" IsCheckable="True" ... />
    ...
</Menu>
...
<ContextMenu>
    <MenuItem Header="View">
        <MenuItem Header="Details"    IsCheckable="True" ... />
        <MenuItem Header="List"       IsCheckable="True" ... />
        <MenuItem Header="Thumbnails" IsCheckable="True" ... />
        ...
    </MenuItem>
</ContextMenu>
您需要在资源字典中创建以下集合:

<Collections:ArrayList x:Key="MenuItems" x:Shared="false">
    <MenuItem Header="Details" />
    <MenuItem Header="List" />
    <MenuItem Header="Thumbnails" />
</Collections:ArrayList>

然后只需使用集合:

<Menu ItemsSource="{StaticResource MenuItems}" />



Aha,听起来不错。但是,它破坏了重复菜单中的所有IsChecked=“{Binding ElementName=…,Path=…}”构造。是否发布整个绑定表达式?了解每个菜单上的绑定之间的差异会更容易。其他的都很相似。“thisControl”是封闭的用户控件。澄清一下:本地化绑定工作正常。但是当我切换到ArrayList方法时,IsChecked绑定停止工作。谢天谢地,muchI希望绑定适用于第一种情况(普通菜单控件),但不适用于第二种情况(ContextMenu),因为ContextMenu不是同一可视树的一部分。看看这些问题。第一种方法对我很有效,但如果您不想更改后面的代码,请尝试第二种链接。
<ContextMenu>
    <MenuItem Header="View" ItemsSource="{StaticResource MenuItems}" />
</ContextMenu>