문제

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top