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