Laden...

Expanderinhalt wird nicht "gestretcht"

Erstellt von Boris0815 vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.835 Views
B
Boris0815 Themenstarter:in
225 Beiträge seit 2008
vor 11 Jahren
Expanderinhalt wird nicht "gestretcht"

Hallo,

ich schreibe gerade eine WPF-Anwendung in der ein Expander sitzt. Die Anwendung besteht im Prinzip aus zwei Teilen, den oberen Teil den man immer sieht und den unteren Teil, der durch einen Expander "versteckt" werden kann.
Das Verhalten des Fensters soll so sein, dass wenn der Expander eingeklappt ist, sich das Fenster auf die Größe des Inhaltes anpasst. (Funktioniert schon)
Wenn der Expander ausgeklappt ist und das Fester maximiert ist, soll auch der gesamte Fensterinhalt genutzt werden. Das Letzte Element im Expander ist ein DataGrid dieses soll den ganzen Fensterinhalt ausfüllen, aber die Größe passt sich immer dem DataGridinhalt an. Ich hab im Anhang ein Bild, der das Fehlverhalten darstellt.
Kann mir bitte jemand sagen wo es hängt?

Hier der etwas vereinfachte XAML:

<Window x:Class="xxx.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ownControl="clr-namespace:owncontrol"
        Title="MainWindow" WindowState="Maximized" SizeToContent="Height" WindowStartupLocation="CenterScreen">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="50" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Border BorderThickness="1" BorderBrush="Black">
            <ownControl:ownControl Grid.Row="0" x:Name="ownControl" DataContext="{Binding ApVM}" HorizontalAlignment="Left"/>
        </Border>
        <Border BorderThickness="1" BorderBrush="Black" Grid.Row="1">
            <StackPanel Orientation="Horizontal">
                <Button Margin="5" Command="{Binding OptionButton}" Width="60">
                </Button>
            </StackPanel>
        </Border>
        <Border BorderThickness="1" BorderBrush="Black" Grid.Row="2" VerticalAlignment="Stretch">
            <Expander IsExpanded="True">
                <DockPanel LastChildFill="True">
                    <TreeView Height="200" DockPanel.Dock="Top">
                    </TreeView>
                    <StackPanel Height="55" Orientation="Horizontal" DockPanel.Dock="Top">
                        <Button Margin="5" Command="{Binding NewFolderButton}" Width="70">
                        </Button>
                        <Button Margin="5" Command="{Binding FileBlockButton}" Width="70">
                        </Button>
                    </StackPanel>
                    <DataGrid VerticalAlignment="Stretch">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Spalte 1"/>
                            <DataGridTextColumn Header="Spalte 2"/>
                            <DataGridTextColumn Header="Spalte 3"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </DockPanel>
            </Expander>
        </Border>
    </Grid>
</Window>

Gruß

Boris

3.430 Beiträge seit 2007
vor 11 Jahren

Hallo Boris0815,

wenn ich das im Screenshot richtig erkannt hat dann wird das DataGrid schon richtig gestretcht so wie du das willst.

Das Problem sind nur die drei Spalten welche du hinzugefügt hast.
Diese passen sich nämlich an deren Inhalt an. D.h. sie sind so breit wie der Header.
Der Rest des DataGrids bleibt unbenützt.

Wenn du willst dass sich eine / oder mehrere Spalten auf das DataGrid stretcht dann kannst du das machen indem du die Width der Column auf Star setzst

Also


<DataGridTextColumn Header="Spalte 3" Width="*" />

Grüße
Michael

B
Boris0815 Themenstarter:in
225 Beiträge seit 2008
vor 11 Jahren

Hallo MichiG,

das mit den Spalten passt so, das DataGrid ist noch nicht mit Daten gefüllt.
Es geht mir um den ungenutzten Platz unterhalb des Grids. Wenn Du den Screenshot in voller Bildgröße anschaust siehst Du unter dem DataGrid die schwarze Linie des Border, der um den Expander liegt.
Mein Ziel ist es, dass das Datagrid bzw. der Expander den Rest vom Window auch ausfüllt.

Gruß

Boris

5.658 Beiträge seit 2006
vor 11 Jahren

Hi Boris0815,

hast du es mal mit einem DockPanel probiert?

Christian

Weeks of programming can save you hours of planning

1.378 Beiträge seit 2006
vor 11 Jahren

Hallo Boris0815,

was du zu erreichen versuchst ist ein wenig wie die Katze beißt sich selbst in den Schwanz: Das Fenster soll sich der Größe der Controls anpassen und die Controls sollen sich an die Größe des Fensters anpassen. Beides gleichzeitig geht automatisch nicht (zumindest wars bei mir auch immer problematisch).

Aber eventuell reicht es ja wenn du die GridRow.Height der letzten Row auf * setzt. Das kann aber dann durchaus dazu führen, dass das Fenster sich nicht mehr automatisch verkleinert.

Lg, XXX