从所选的项目获取在WPF和C#ListView项数 [英] Get listView item number from selected item in wpf and c#
本文介绍了从所选的项目获取在WPF和C#ListView项数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有图像的ListView和我想知道哪些图像从左击鼠标选中。
我没有发现任何方式做到这一点,我就堵住这个代码中,这是不可能投的ListViewItem到图像的获取列表索引。
C#中:
私人无效listView_Click(对象发件人,MouseButtonEventArgs E)
{
VAR hitTestResult = VisualTreeHelper。的HitTest(listViewExercise,e.GetPosition(NULL));
VAR将selectedItem = hitTestResult.VisualHit;
,而(将selectedItem!= NULL)
{
如果(selectedItem设置为System.Windows.Controls.ListViewItem)
{
中断;
}
将selectedItem = VisualTreeHelper.GetParent(selectedItem属性);
}
图像的图像=(图)selectedItem属性;
Console.WriteLine(image.Source);
}
XAML:
< K:KinectRegion X:NAME =ChoiceExercise背景=黑>
<&DockPanel中GT;
<网格和GT;
< Grid.RowDefinitions>
< RowDefinition高度=*/>
< RowDefinition HEIGHT =5 */>
< /Grid.RowDefinitions>
< K:KinectUserViewer Grid.Row =0HEIGHT =100的HorizontalAlignment =中心VerticalAlignment =顶部/>
<的ScrollViewer K:KinectRegion.IsHorizontalRailEnabled =真K:KinectRegion.IsScrollInertiaEnabled =真VerticalScrollBarVisibility =已禁用Grid.Row =1>
将;的ListView Grid.Row =1>
< ListView.ItemsPanel>
< ItemsPanelTemplate>
< StackPanel的方向=横向>< / StackPanel的>
< / ItemsPanelTemplate>
< /ListView.ItemsPanel>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/ la.jpg/>
< / Viewbox控件>
< Viewbox控件WIDTH =300>
<图像拉伸=UniformToFill来源=图像/结束锻炼win.jpg/>
< / Viewbox控件>
< /&的ListView GT;
< /&的ScrollViewer GT;
< /网格和GT;
< / DockPanel中>
< / K:KinectRegion>
解决方案
有是获得该项目的容器更简单的方法,一旦你做到这一点,你只需要提取的DataContext
来获得项目的的ItemsSource
:
私人无效listView_Click(对象发件人,MouseButtonEventArgs E)
{
无功源= e.OriginalSource为DependencyObject的;
如果(来源== NULL)
的回报;
VAR将selectedItem = ItemsControl.ContainerFromElement((ItemsControl的)寄件人,源)
为FrameworkElement的;
如果(selectedItem设置== NULL)
的回报;
VAR图像= selectedItem.DataContext为图像;
如果(图像!= NULL)
Console.WriteLine(image.Source);
}
I have a ListView of images and i would know which image is selected from left click mouse. I don't find any way to do this and i'm blocked on this code where it's impossible cast ListViewItem to Image for obtain index in list.
c#:
private void listView_Click(object sender, MouseButtonEventArgs e)
{
var hitTestResult = VisualTreeHelper.HitTest(listViewExercise, e.GetPosition(null));
var selectedItem = hitTestResult.VisualHit;
while (selectedItem != null)
{
if (selectedItem is System.Windows.Controls.ListViewItem)
{
break;
}
selectedItem = VisualTreeHelper.GetParent(selectedItem);
}
Image image = (Image)selectedItem;
Console.WriteLine(image.Source);
}
XAML:
<k:KinectRegion x:Name="ChoiceExercise" Background="Black" >
<DockPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="5*"/>
</Grid.RowDefinitions>
<k:KinectUserViewer Grid.Row="0" Height="100" HorizontalAlignment="Center" VerticalAlignment="Top"/>
<ScrollViewer k:KinectRegion.IsHorizontalRailEnabled="True" k:KinectRegion.IsScrollInertiaEnabled="true" VerticalScrollBarVisibility="Disabled" Grid.Row="1" >
<ListView Grid.Row="1">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
<Viewbox Width="300" >
<Image Stretch="UniformToFill" Source="Images/la.jpg"/>
</Viewbox>
<Viewbox Width="300">
<Image Stretch="UniformToFill" Source="Images/end exercise win.jpg"/>
</Viewbox>
</ListView>
</ScrollViewer>
</Grid>
</DockPanel>
</k:KinectRegion>
解决方案
There is an easier way to obtain the item container, and once you do that, you just need to extract the DataContext
to get the item from the ItemsSource
:
private void listView_Click(object sender, MouseButtonEventArgs e)
{
var source = e.OriginalSource as DependencyObject;
if (source == null)
return;
var selectedItem = ItemsControl.ContainerFromElement((ItemsControl)sender, source)
as FrameworkElement;
if (selectedItem == null)
return;
var image = selectedItem.DataContext as Image;
if (image != null)
Console.WriteLine(image.Source);
}
这篇关于从所选的项目获取在WPF和C#ListView项数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文