我正在尝试创建一个上下文菜单,这样当您右键单击ListViewItem
时,会向用户显示一个选项列表。问题是;我无法在ListViewItem
事件中获取与Click
相关联的参与项目。
我想这可能是因为我将ContextMenu
放在我的XAML的错误位置。我一直在寻找和玩耍多年,但认为它可能与DataTemplate
我正在使用的示例不在模板中的地方有关。
<ListView Margin="0" Name="FileImagesListView" VerticalAlignment="Top" Grid.Row="0">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="Mouse.MouseEnter" Handler="MouseEnterPicFileListItem" />
<EventSetter Event="Mouse.MouseLeave" Handler="MouseLeavePicFileListItem"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Border BorderBrush="{Binding Path=BorderBrushColourID, Converter={StaticResource BorderColourConverter}}" BorderThickness="3" CornerRadius="2">
<StackPanel FlowDirection="LeftToRight" Orientation="Vertical" Margin="3">
<Grid>
<TextBlock TextAlignment="Center" Text="{Binding Path=TimeAgo}" Margin="0,7" ></TextBlock>
<Label Style="{StaticResource CircularLabel}" HorizontalAlignment="Right" Height="35" Margin="0,-8,0,0" Content="{Binding Path=MatchedCount}" Visibility="{Binding Path=MatchedCount, Converter={StaticResource VisibleIfGreaterThanOne}}" ></Label>
</Grid>
<Image Name="FilePic" Height="Auto" Width="160" Source="{Binding Path=BitmapPicture}"></Image>
</StackPanel>
</Border>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Margin="3" Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
答案 0 :(得分:1)
通常,只需调用myListViewItem.DataContext
并将其转换为应有的数据项即可获取数据项。
private void ListViewItem_Click(object sender, EventArgs e)
{
ListViewItem item = sender as ListViewItem;
if (item == null) return;
MyDataItem = item.DataContext as MyDataItem;
// Do whatever here
}
作为旁注,WPF ContextMenus不与您的应用程序共享相同的VisualTree,因此尝试将它们绑定到主UI的工作方式不同。很难说这是否与您的问题有关,因为我发现您的问题中没有ContextMenu
或Click
事件。
修改强>
如果您的ContextMenu位于ListBoxItem上,那么您需要引用ContextMenu的PlacementTarget
来获取ListBoxItem
附加到的ContextMenu