Frage

Ich mag mit einem Item eine wichtige Liste der Elemente anzuzeigen.

Der Grund, warum ich ein Item bin ist, dass die Datatemplate ist viel komplexer in der Anwendung auf ich arbeite. Der Beispielcode zur Verfügung gestellt nur das Sizing Problem spiegelt Ich habe

Ich möchte:

  • die Items virtualisiert werden, da gibt es viele Elemente Anzeige
  • seine Größe automatisch in den übergeordneten Container zu erweitern (das Grid)

    <Grid>
        <ItemsControl x:Name="My" ItemsSource="{Binding Path=Names}">
            <ItemsControl.Template>
                <ControlTemplate>
                    <StackPanel>
                        <StackPanel>
                            <TextBlock Text="this is a title" FontSize="15" />
                            <TextBlock Text="This is a description" />
                        </StackPanel>
                        <ScrollViewer CanContentScroll="True" Height="400px">
                            <VirtualizingStackPanel IsItemsHost="True" />
                        </ScrollViewer>
                    </StackPanel>
                </ControlTemplate>
            </ItemsControl.Template>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
    

Der Code hinter lautet:

public partial class Page1: Page
{
    public List<string> Names { get; set; }
    public Page1()
    {
        InitializeComponent();

        Names = new List<string>();
        for(int i = 0; i < 10000; i++)
            Names.Add("Name : " + i);

        My.DataContext = this;
    }
}

Als ich die Scroll Höhe 400px zwingen, Itemscontrol-Virtualisierung funktioniert, wie ich erwarten: Die Itemscontrol zeigt die Liste sehr schnell, unabhängig davon, wie viele Elemente enthält

.

Wenn ich jedoch Höhe entfernen = „400px“, wird die Liste erweitert ihre Höhe die gesamte Liste anzuzeigen, unabhängig ihre Mutterbehälterhöhe. Schlimmer noch:. Es erscheint hinter Behälter

Setzen eines Scroll um die Items gibt das visuelle Ergebnis erwartet, aber die Virtualisierung geht weg und die Liste nimmt zu viel Zeit anzuzeigen.

Wie kann ich erreichen, sowohl automatische Höhen Expansion und Virtualisierung meiner Items?

War es hilfreich?

Lösung

Das Problem ist in der ItemsControl.Template: Sie Stackpanel dort verwenden, die ihre Kinder so viel Höhe gibt, wie sie wollen. Ersetzen Sie es so etwas wie

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel>
        <TextBlock Text="this is a title" FontSize="15" />
        <TextBlock Text="This is a description" />
    </StackPanel>
    <ScrollViewer CanContentScroll="True" Grid.Row="1">
        <VirtualizingStackPanel />
    </ScrollViewer>
</Grid>

Und es sollte funktionieren.

Hope es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top