在我的资源中,我创建了一个上下文菜单,我希望将它的ItemsSource
属性绑定到我创建的名为ObservableCollection<object>
的{{1}}属性在我的ContextMenuItems
中填充了用于表示菜单项的项目。目前,它看起来像这样
xaml.cs
然后在我的视线中
<UserControl.Resources>
<ContextMenu x:Key="ContextMenu"
DataContext="{Binding}"
ItemsSource="{Binding ContextMenuItems}">
<ContextMenu.Resources>
<DataTemplate DataType="{x:Type local:CtContextMenuItem}">
<MenuItem Header="{Binding Header}"
Click="MenuItem_OnClick"
Visibility="{Binding Visibility}"
IsEnabled="{Binding IsEnabled}" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:CtContextMenuSepparatorItem}">
<Separator />
</DataTemplate>
</ContextMenu.Resources>
</ContextMenu>
</UserControl.Resources>
<TreeView ContextMenu="{DynamicResource = ContextMenu}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:CustomizableTreeBaseItem}"
ItemsSource="{Binding TreeChildren}">
<TextBlock Text="{Binding Header}"
ContextMenu="{DynamicResource = ContextMenu}/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
是TreeChildren
上的公共属性,它包含公共属性,然后绑定到树视图的项目。从代码隐藏设置了树视图的Items属性的local:CustomizableTreeBaseItem
的Observable集合。
但是,当我右键单击树视图中的项目时,这似乎不起作用我没有像我预期的那样获得上下文菜单。
我试图查找是否需要创建一个以某种方式绑定到该属性的资源,但似乎没有办法解决这个问题。
我也试图绑定数据上下文,但我似乎无法想出一条可行的路径。
答案 0 :(得分:1)
如果在定义ContextMenuItems
资源的UserControl
的代码隐藏中定义了ContextMenu
属性,则可以指定RelativeSource
:
<ContextMenu x:Key="ContextMenu"
ItemsSource="{Binding ContextMenuItems, RelativeSource={RelativeSource AncestorType=UserControl}}">
<ContextMenu.Resources>
...
</ContextMenu.Resources>
</ContextMenu>