Frage

WPF Gridsplitter macht meinen Grid breiter als mein Fenster!

Ich habe einen WPF-Grid mit einem Gridsplitter bekommt. Wenn ich meine Größe der Spalten ändern, dann kann ich mein Gitter breiter als mein Fenster und nicht sichtbar machen.

Es beginnt wie folgt:

WPF Grid http://img201.imageshack.us/img201/9505/onehg6 .jpg

Aber nach der linken Spalte erweitert, kann ich nicht mehr sehen, die rechte Spalte (grün):

WPF Gridsplitter http://img201.imageshack.us/img201/1804/twomy6 .jpg

Was mache ich falsch? Wie halte ich die Gridsplitter von der Größe meiner Grid zu ändern?


Update:

Ich kämpfe immer noch mit diesem. Ich habe jetzt Verschachtelung Gitter innerhalb Gitter versucht. Das half nicht. Hier ist meine XAML ColumnDefinitions, RowDefinitions und GridSplitters ...

<Window ... >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="150" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" MinWidth="400" />
        </Grid.ColumnDefinitions>
        <GridSplitter 
            ResizeDirection="Columns"
            ResizeBehavior="BasedOnAlignment"
            Grid.Column="1"
            HorizontalAlignment="Center"
            VerticalAlignment="Stretch"
            Width="2"
            Margin="0,5,0,5"
            Panel.ZIndex="1"/>
        <Grid Grid.Column="0">
            ...
        </Grid>
        <Grid Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" MinWidth="150" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" MinWidth="200" />
            </Grid.ColumnDefinitions>
            <GridSplitter 
                ResizeDirection="Columns"
                ResizeBehavior="PreviousAndNext"
                Grid.Column="1"
                HorizontalAlignment="Center"
                VerticalAlignment="Stretch"
                Width="2"
                Margin="0,5,0,5"
                Panel.ZIndex="1"/>
            <Grid Grid.Column="0">
                ...
            </Grid>
            <Grid Grid.Column="2">
                ...
            </Grid>
        </Grid>
    </Grid>
</Window>

Update:

Ich denke, das Problem mit dem WebBrowser-Steuerelement ist. Siehe neue Frage:

WPF Gridsplitter funktioniert nicht mit WebBrowser-Steuerelement?

War es hilfreich?

Lösung

Wenn Ihr Fenster der Größe verändert wird, so dass ihre Breite geringer ist als die Summe der Spalten MinWidths, werden Sie die Spalten sehen abgeschnitten, aber ansonsten kann ich das Problem nicht reproduzieren:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition MinWidth="150" Width="*"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition MinWidth="400" Width="*"/>
        </Grid.ColumnDefinitions>
        <GridSplitter
            Width="2"
            Grid.Column="1"
            HorizontalAlignment="Center"
            Margin="0,5,0,5"
            Panel.ZIndex="1"
            VerticalAlignment="Stretch"
            ResizeBehavior="BasedOnAlignment"
            ResizeDirection="Columns"/>
        <Grid Grid.Column="0">
            <Border Background="Red" Margin="5"/>
        </Grid>
        <Grid Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MinWidth="150" Width="*"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition MinWidth="200" Width="*"/>
            </Grid.ColumnDefinitions>
            <GridSplitter
                Width="2"
                Grid.Column="1"
                HorizontalAlignment="Center"
                Margin="0,5,0,5"
                Panel.ZIndex="1"
                VerticalAlignment="Stretch"
                ResizeBehavior="PreviousAndNext"
                ResizeDirection="Columns"/>
            <Grid Grid.Column="0">
                <Border Background="Green" Margin="5"/>
            </Grid>
            <Grid Grid.Column="2">
                <Border Background="Blue" Margin="5"/>
            </Grid>
        </Grid>
    </Grid>
</Window>

die rote Säule erweitern, wird es nur erweitern, bis die rechte Spalte seine MinWidth von 400 erreicht, es wird nicht die Seite booten.

Es ist möglich, dass Sie andere Eigenschaften des Fensters oder der äußersten Gitter sind Einstellung, die dieses Verhalten verursachen würde ...

Andere Tipps

Versuchen Sie, Ihre Breite sich verändernden Größen zu spielen. Dies bewirkt, dass der Splitter, um nur die Größe der Spalten ändern, zwischen denen er sitzt, so dass nicht sicher, ob dies das gewünschte Verhalten. Doch mit Sterne Größen, wird der Inhalt nicht über die Grenzen des Fensters wachsen.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*" MinWidth="100" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" MinWidth="50" />
        <ColumnDefinition Width="2*" MinWidth="100" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="3*" MinWidth="150" />
    </Grid.ColumnDefinitions>
    <GridSplitter 
        ResizeDirection="Columns"
        Grid.Column="1"
        Grid.RowSpan="8"
        HorizontalAlignment="Center"
        VerticalAlignment="Stretch"
        Width="2"
        Margin="0,5,0,5"
        Panel.ZIndex="1"/>
    ...
</Grid>

Es funktioniert für mich ohne zusätzlichen Code, wenn es keine Spalten mit Auto Breite zwischen den Splittern sind, das heißt:.

<Grid >
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="20*" MinWidth="50" MaxWidth="500" />
    <ColumnDefinition Width="Auto"/> <!-- Remove such columns /-->
    <ColumnDefinition Width="100*" MinWidth="850"/>
    <ColumnDefinition Width="30*" MinWidth="50" MaxWidth="800" />
</Grid.ColumnDefinitions>
...
<GridSplitter HorizontalAlignment="Right" Width="3"/>
...
<GridSplitter Grid.Column="3" HorizontalAlignment="Left" Width="3" />
<!-- Assign Grid.Column to 2 if you remove the auto width column /-->
...
</Grid>

Ansonsten ist das Gitter wird resizable.

das Dragdelta-Ereignis Capturing ist eine andere Art und Weise tun:

private void VerticalGridSplitter_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
    if (GridName.ColumnDefinitions[2].Width.Value < 400)
    {
        GridName.ColumnDefinitions[2].Width = new GridLength(400);
    }
}

Aber mit MinWidth auf einem * Column sollte gut funktionieren. Beachten Sie, dass die Column mit dem MinWidth auf der obersten Ebene sein muss. Es funktioniert nicht, wenn es in einem gewissen Raster in einer Spalte verschachtelt ist.

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