如何在WPF ListView中获取所选项容器的坐标
-
03-07-2019 - |
题
我想在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);
不隶属于 StackOverflow