2012-03-04 76 views
0

我有一个简单的ListView绑定到计算集合。该视图在显示中调用Calc Name属性。我已经将列表菜单设置为列表视图中的各个项目,但右键单击上下文菜单显示为一个没有任何内容的小框。我错过了什么?listview datatemplate上的上下文菜单不工作

<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> 

谢谢。

回答

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元素(不是一个静态的资源)。

+0

谢谢你。我只是为了查看它而移动资源,但没有意识到语法错误。 – 2012-03-04 13:39:25