Zentrieren ausgewählte Element in einer scroll-viewer

Ich versuche zu center ein ausgewähltes Element in einem ListView-Steuerelement innerhalb eines ScrollViewer und kämpfen, um die Berechnung der vertikalen Versatz, ich sollte die Einstellung des ScrollViewer-Element relativ zu der ListView.

Den folgenden links stellen Sie mich auf die richtige Spur, aber wegen der Einschränkung der WinRT-API, war nicht in der Lage, Sie zu nutzen:

Der gewünschte Effekt ist wie folgt:

Zentrieren ausgewählte Element in einer scroll-viewer

Dies ist ein Beispiel-setup in meinem XAML:

<ScrollViewer x:Name="MyScrollViewer">
    <ListView x:Name="MyView" VerticalAlignment="Center"
                      SelectionChanged="Selector_OnSelectionChanged">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Width="80" Height="80" Margin="0">
                    <TextBlock Text="{Binding}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.Items>
            <x:String>1</x:String>
            <x:String>2</x:String>
            <x:String>3</x:String>
            <x:String>4</x:String>
            <x:String>5</x:String>
            <x:String>6</x:String>
            <x:String>7</x:String>
            <x:String>8</x:String>
            <x:String>9</x:String>
        </ListView.Items>
    </ListView>
</ScrollViewer>

Kenntnis der index des ausgewählten Elements, wie kann ich berechnen, den vertikalen offset, die ich verwenden kann bei meiner Methode:

private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    double maxVerticalOffset = MyScrollViewer.ExtentHeight - MyScrollViewer.ViewportHeight;

    int selectedItemIndex = MyView.SelectedIndex;

    double verticalOffset = ...

    MyScrollViewer.ChangeView(null, verticalOffset, null);
}
InformationsquelleAutor Hady | 2014-03-23
Schreibe einen Kommentar