2017-02-02 2 views
1

Ich arbeite an einer WinRT-App, die eine Listview enthält. Die Listview ist kürzlich gewachsen und ich muss eine vertikale Bildlaufleiste darum legen. Bisher habe ich die Höhe im Grid auf 500 fest codiert. Allerdings möchte ich wissen, wie man die Höhe einstellt, um zu erkennen, wieviel Platz verfügbar ist. Dies kann abhängig vom verwendeten Gerät variieren. Wie mache ich das?Scrollen einer ListView - Bildschirmhöhe Erkennung benötigt

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="500"/> 
    </Grid.RowDefinitions> 

    <StackPanel Grid.Row="0" Orientation="Horizontal"> 
     <TextBlock Text="*" FontSize="40" FontWeight="Bold" Foreground="Red"/> 
     <TextBlock Text=" = Required " FontSize="20"/> 
    </StackPanel> 
    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" > 
    <ListView 
     ItemsSource="{Binding Path=Survey.SelectedSection.Questions, Mode=TwoWay}" 
     IsSwipeEnabled="False" 
     SelectionMode="None" 
     Background="White" 
     ItemTemplateSelector="{StaticResource ResourceKey=QuestionDisplay}" 
     ItemContainerStyle= 
      "{StaticResource ResourceKey=QuestionListViewItemContainerStyle}" /> 
    </ScrollViewer> 
</Grid> 
+1

ListView hat bereits einen ScrollViewer in seiner Vorlage eingebettet. Entfernen Sie einfach den übergeordneten ScrollViewer, den Sie jetzt dort haben, und stellen Sie die Höhe Ihrer zweiten Zeile auf "Height =" * "' ein und sie wird aufgerufen, da sie standardmäßig auf "Auto" eingestellt ist. –

+1

ScrollViewer.VerticalScrollBarVisibility ist standardmäßig Auto. Wenn die Rolle nicht aufgerufen wird, lautet meine nächste Frage: Gibt es Elterncontainer, von denen dieses Gitter ein Kind ist, wie StackPanel? Weil diese Art der Sache auch dazu führen würde, dass sie das Scrollen nicht aufruft. –

+0

Sie haben Recht. Es gab einen Stackpanel Elternteil und jetzt habe ich es los, es funktioniert. Also vielen Dank dafür. – arame3333

Antwort

1

So wie wir diskutiert haben. ListView hat ein ScrollViewer bereits in seiner Vorlage eingebettet. Der Grund, warum Scrolling mit einer festen Höhe im Gegensatz zu natürlich aufgerufen würde, war eine feste Grenze, um es aufzurufen.

Durch Ihr Layout so eingestellt wird, dass es Eltern Platte (und auf den Baum Eltern) nicht enthalten StackPanel und mit Grid statt mit Stern * Sizing es eine Grenze erlaubt es aufzurufen, wie gewünscht. Der Grund dafür ist, dass StackPanel nur den benötigten Platz verbraucht, unabhängig vom verfügbaren Platz. A Grid verbraucht den verfügbaren Speicherplatz, während seine untergeordneten Elemente in seinem Layout eingeschränkt werden, vorausgesetzt, dass die zum Aufrufen des Scrollings des eingebetteten Elements ScrollViewer standardmäßig festgelegte Eigenschaft ScrollViewer.VerticalScrollBarVisibility standardmäßig auf Auto festgelegt ist.

Froh, dass Sie Ihre Lösung gefunden haben, willkommen in der wundervollen Welt von XAML, die Sie, wenn Sie sich erst einmal daran gewöhnt haben, viel einfacher zu bearbeiten sind als Cousin HTML. Prost :)

+0

Sie haben wahrscheinlich Recht mit XAML, obwohl es sehr ausführlich scheint. Ich habe Webentwicklung so lange gemacht, so dass es eine Weile dauern wird, bevor ich XAML bevorzuge – arame3333

+0

Ya ich höre dich, ich arbeite mit beiden täglich auf Unternehmensebene und ich muss sagen, XAML> HTML jeden Tag der Woche wenn es mit allen zusätzlichen Funktionen von Plattformen wie WPF, UWP, etc. enthalten ist. Außer ich bekomme, wie es eine Vertrautheit Abstimmung sein kann, bis Sie wirklich tief in beide getaucht haben. –

Verwandte Themen