Как я могу получить координаты выбранного элемента контейнера в WPF ListView - PullRequest
2 голосов
/ 20 октября 2008

Я хочу отобразить некоторые элементы WPF рядом с выбранным элементом ListView. Как я могу получить координаты (экранные или относительные) выбранного 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>

Ответы [ 2 ]

3 голосов
/ 20 октября 2008

Теперь я нашел решение сам. Я искал простое свойство, но оно не имело смысла, потому что все элементы пользовательского интерфейса в WPF являются относительными.

Этот код работает:

        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);
2 голосов
/ 20 октября 2008

Вы должны использовать ContainerFromElement , чтобы получить контейнер элемента, который является визуальным, и оттуда вы можете получить координаты. Вы не можете выразить это в XAML, однако. Вам необходимо сделать это в коде для одного из событий ListView, возникающих при изменении выбранного элемента. Кстати, имейте в виду, что предмет может быть собственным контейнером.

Вы не можете сделать это в XAML, поскольку у элемента нет прикрепленного свойства, которое показывает, что элемент выбран. (хотя я давно не играл с WPF, так что это могло измениться)

...