从所选的项目获取在WPF和C#ListView项数 [英] Get listView item number from selected item in wpf and c#

查看:229
本文介绍了从所选的项目获取在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的Horizo​​ntalAlignment =中心VerticalAlignment =顶部/>
<的ScrollViewer K:KinectRegion.IsHorizo​​ntalRailEnabled =真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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆