我有一个简单的ListView绑定到一个Calculations集合。视图在显示中调用calc Name属性。我已将上下文菜单设置为列表视图中的各个项目,但右键单击上下文菜单会显示为一个没有任何内容的小框。我缺少什么?
<ListView x:Name="CalcList" ItemsSource="{Binding Calculations}">
<ListView.ItemTemplate>
<DataTemplate DataType="x:Type lib:Calculation">
<DataTemplate.Resources>
<ContextMenu x:Key="CalcMenu">
<MenuItem Header="Delete Calculation" Click="MenuItem_Click"/>
<MenuItem Header="Another"/>
<MenuItem Header="Another"/>
</ContextMenu>
</DataTemplate.Resources>
<Border BorderBrush="Black" BorderThickness="1" Margin="2">
<Border.ContextMenu>
<ContextMenu ContextMenu="{StaticResource CalcMenu}"/>
</Border.ContextMenu>
<TextBlock MouseLeftButtonDown="DisplayCalc" Text="{Binding Path=Name}"></TextBlock>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
感谢。
答案 0 :(得分:1)
如果有的话,您在定义Border.ContextMenu元素时会出现语法错误。正确的语法(边框元素):
<Border BorderBrush="Black" BorderThickness="1"
Margin="2"
ContextMenu="{StaticResource CalcMenu}">
<TextBlock ... />
</Border>
说,你可以做很多优化。首先,不是为每个项目实例化上下文菜单,而是可以将CalcMenu移动到该部分(向上一级),或者甚至更远 - 移动到主窗口。
其次,为什么要为每个项目定义单独的上下文菜单?当鼠标位于项目之间的边距时,上下文菜单是否真的很重要?只需将上下文菜单设置为整个列表:
<ListView x:Name="CalcList" ContextMenu="{StaticResource CalcMenu}">
...
并将CalcMenu定义为主窗口资源,或者内联ListView元素(不是静态资源)。