listview datatemplate上的Contextmenu不起作用

时间:2012-03-04 12:55:41

标签: wpf xaml

我有一个简单的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>

感谢。

1 个答案:

答案 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元素(不是静态资源)。