
单击ItemsControl项时,我希望从ItemsControl获取项值。
下面是我的示例代码:
<ItemsControl x:Name="ListViewProducts" ItemsSource="{Binding Product}" PreviewMouseLeftButtonUp="listView_Click" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Margin="10" Width="110" Height="160">
<StackPanel>
<Border Width="100" Height="100" CornerRadius="5" Margin="5">
<Border.Effect>
<DropShadowEffect ShadowDepth="1"/>
</Border.Effect>
<Border.Background>
<ImageBrush ImageSource="{Binding Image}" />
</Border.Background>
</Border>
<!--<TextBlock Margin="5" Text="{Binding Value, StringFormat={}{0:C}}" FontSize="17" FontFamily="Franklin Gothic Medium"/>-->
<TextBlock Margin="5 0" Text="{Binding Name}" FontSize="15"/>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>代码隐藏:
private void listView_Click(object sender, RoutedEventArgs e)
{
var item = (sender as ItemsControl);
if (item != null)
{
}
}但是这不管用,我正在弄到物品的细节。请帮帮我。
我只需要使用Itemcontrol。当我使用listview时,它显示列表不是一种正确的方式,所以我使用itemscontrol。请看下面的图片。当我使用列表视图时,它会显示为一个框。请找到截图。

发布于 2020-01-29 14:07:52
您可以定义一个PreviewMouseLeftButtonUp并为容器处理PreviewMouseLeftButtonDown事件,而不是处理ItemsControl的PreviewMouseLeftButtonDown事件。然后,您可以简单地将DataContext的sender参数转换为您的类型:
private void ContentControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var product = ((FrameworkElement)sender).DataContext as Product;
...
}XAML:
<ItemsControl x:Name="ListViewProducts" ItemsSource="{Binding Product}" >
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ContentControl_PreviewMouseLeftButtonDown" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
...
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
...
</ItemsControl.ItemsPanel>
</ItemsControl>或者为PreviewMouseLeftButtonDown处理ItemTemplate中的Border事件,并执行相同的操作。
https://stackoverflow.com/questions/59967095
复制相似问题