我正在尝试创建一个上下文菜单,这样当您右键单击ListViewItem时,就会向用户显示一个选项列表。问题是,我无法在Click事件中获得链接到ListViewItem的引用项。
我想这可能是因为我把ContextMenu放在了错误的位置。我已经搜索和尝试了很长时间,但我认为这可能与我正在使用的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>发布于 2012-01-09 22:22:05
通常,您只需调用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以获取ContextMenu附加到的ListBoxItem
https://stackoverflow.com/questions/8786931
复制相似问题