我想在ListView的选定项目附近显示一些WPF元素。如何获取所选ListViewItem的坐标(屏幕或相对)?

<ListView 
    x:Name="TechSchoolListView"
    ClipToBounds="False"
    Width="Auto" Height="Auto" 
    HorizontalContentAlignment="Stretch" 
    VerticalContentAlignment="Top" 
    ItemTemplate="{DynamicResource TechSchoolDataTemplate}" 
    ItemsSource="{Binding Path=TechSchoolResearchList, Mode=Default}" 
    SelectedIndex="1"
    SelectedValue="{Binding Path=SelectedTechSchool, Mode=Default}" 
    SelectionChanged="TechSchoolList_SelectionChanged" 
    ItemContainerStyle="{DynamicResource TechSchoolItemContainerStyle}" 
    ScrollViewer.CanContentScroll="False" 
    ScrollViewer.VerticalScrollBarVisibility="Disabled" >
    <ListView.Background>
        <SolidColorBrush Color="{DynamicResource PanelBackgroundColor}"/>
    </ListView.Background>
</ListView>
有帮助吗?

解决方案

您应该使用 ContainerFromElement 来获取项目的容器,是一个视觉,从那里你可以得到坐标。但是,您无法在XAML中表达这一点。您需要在其中一个ListView事件的代码中执行此操作,并在更改所选项目时引发。顺便说一下,请记住该物品可以是自己的容器。

您无法在XAML中执行此操作,因为项目上没有附加属性,表明该项目已被选中。 (虽然我有一段时间没有玩WPF,所以可能已经改变了)

其他提示

现在我已经找到了自己的解决方案。我搜索了一个简单的属性,但没有任何意义,因为WPF中的所有UI元素都是相对的。

此代码似乎正在运行:

        UIElement selectedContainer = (UIElement) TechSchoolListView.ItemContainerGenerator.ContainerFromIndex(TechSchoolListView.SelectedIndex);
        Point cursorPos = selectedContainer.TranslatePoint(new Point(selectedContainer.DesiredSize.Width, 0.0), Page);
        PanelCursor.Height = selectedContainer.DesiredSize.Height;
        PanelCursor.Margin = new Thickness(400, cursorPos.Y, 0.0, 0.0);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top