不会触发上下文菜单事件或listview的itemtemplate内的控件触发器

时间:2015-09-11 12:57:14

标签: c# wpf itemtemplate eventtrigger

我遇到了以下问题。我的xaml代码中的情况如下:

    <ListView ItemsSource="{Binding ListViewItems}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <Label Content="Test">
                        <Label.ContextMenu>
                            <ContextMenu ItemsSource="{Binding MenuItems}">

                            </ContextMenu>
                        </Label.ContextMenu>
                    </Label>
                </WrapPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="PreviewMouseUp">
                <i:InvokeCommandAction Command="{Binding LabelMouseUpCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </ListView>

单击标签后,没有显示上下文菜单且触发器也不起作用,因此未输入LabelMouseUpCommand方法。我担心listview会处理点击本身,而不会将其传递给嵌入式控件。

有没有办法将它传递给控件。将来我想在itemtemplate中添加几个控件,每个人都拥有不同的上下文菜单。

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的答案stackoverflow article

作者解释说,contextmenu与listview不在同一个可视树中。因此,我的初始绑定无法工作,因为在可视树中找不到源。

此外,Sinatr完全正确,触发器最初是为listview定义的,而不是标签。

这是我的工作代码:

<ListView ItemsSource="{Binding ListViewItems}" x:Name="listViewMain">
    <ListView.ItemTemplate>
        <DataTemplate>
            <WrapPanel>
                <Label Content="Test">
                    <Label.ContextMenu>
                        <ContextMenu ItemsSource="{Binding DataContext.MenuItems, Source={x:Reference listViewMain}}">

                        </ContextMenu>
                    </Label.ContextMenu>
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="PreviewMouseUp">
                            <i:InvokeCommandAction Command="{Binding DataContext.LabelMouseUpCommand, Source={x:Reference listViewMain}}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </Label>
            </WrapPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>