Wie kann ich die Koordinaten eines ausgewählten Element Container in einem WPF-Listview erhalten

StackOverflow https://stackoverflow.com/questions/219369

Frage

Ich möchte in der Nähe des ausgewählten Elements eines Listview einige WPF-Elemente angezeigt werden soll. Wie kann ich die Koordinaten (Bildschirm oder relativ) des ausgewählten ListViewItem erhalten?

<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>
War es hilfreich?

Lösung

Sie sollten verwenden ContainerFromElement die Sache des Behälters zu erhalten, die ist ein visuelles und dort von Ihnen die Koordinaten erhalten. Sie können dies in XAML nicht ausdrücken, aber. Sie müssen es in Code zu tun, auf einem der Listview-Ereignisse, ausgelöst, wenn das ausgewählte Element geändert wird. bedenken Sie Btw, dass das Element kann ein eigener Container sein.

Sie können dies in XAML nicht tun, da es auf dem Punkt keine angebrachte Eigenschaft ist, dass der Artikel zeigt, ausgewählt ist. (Obwohl ich nicht mit WPF in einer Weile gespielt, so dass möglicherweise geändert hat)

Andere Tipps

Jetzt habe ich eine Lösung von mir gefunden. Ich habe für eine einfache Eigenschaft gesucht, aber es machte keinen Sinn, da alle Elemente der Benutzeroberfläche in der WPF relativ sind.

Dieser Code scheint zu funktionieren:

        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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top