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>
해결책
당신은 사용해야합니다 컨테이너 프롬 리멘트 시각적 인 품목의 컨테이너를 얻으려면 좌표를 얻을 수 있습니다. 그러나 이것을 XAML로 표현할 수는 없습니다. 선택한 항목이 변경 될 때 제기 된 ListView 이벤트 중 하나에서 코드로 수행해야합니다. BTW, 품목은 자체 컨테이너가 될 수 있습니다.
항목이 선택되었음을 보여주는 항목에 첨부 된 속성이 없으므로 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