13 Stimmen

Binden Sie die Höhe einer Grid-Zeile, um es den Inhalt in WPF

Ich habe ein Gitter mit einigen Zeilen. In der obersten Zeile habe ich ein ItemsControl, das dynamisch an eine Sammlung gebunden ist und einen DataTemplateSelector und ein ItemsPanelTemplate (mit einem einzigen horizontal angeordneten WrapPanel) verwendet. Hier ist eine abgespeckte Version von dem, was ich bisher habe:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40" />
        <RowDefinition Height="2" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
    <ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</Grid>

Anstatt die Höhe der ersten Zeile auf 40 zu setzen, möchte ich sie dynamisch auf der Grundlage der Mindesthöhe festlegen, die das ItemsControl haben muss, um alle seine Inhalte unterzubringen. Da die Höhe des ItemsControls durch die Höhe der Grid Row eingeschränkt wird, kann ich nicht herausfinden, welches Element ich binden sollte und an welche Element-Eigenschaft ich es binden sollte.

Es wäre sinnvoll, die Höhe der Grid Row an die "gewünschte Höhe" des ItemsControls zu binden. Also habe ich die DesiredSize-Eigenschaft gefunden und die Höhe meiner RowDefinition an die DesiredSize.Height des ItemsControls gebunden. Das funktioniert, wenn es zum ersten Mal lädt, aber nicht aktualisieren, wie ich die Größe des Steuerelements (denken Sie daran, ich bin mit einem WrapPanel als meine ItemsPanelTemplate, so wie ich die Größe des Fensters, die Höhe des ItemsControl ändern sollte).

Weiß jemand, wenn diese Art von Situation sogar von der Bindung-Framework unterstützt wird, oder müsste ich Ereignis-Handler-Code hinzufügen, um dies zu erreichen?

Gracias.

37voto

Bubblewrap Punkte 6976

Haben Sie versucht, die Höhe auf Auto einzustellen, um das zu erreichen, was Sie wollen:

<RowDefinition Height="Auto"/>

(oder denke ich hier zu einfach ?)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X