Frage

Ich habe einige Probleme dies in einer WPF-Anwendung arbeitet immer ich arbeite. Im Grunde, was ich bin nach ist so etwas wie der Aufgabenbereich in einer MMC:

  • Die App hat drei Spalten im Hauptteil des Displays. Ich brauche eine Spalte auf der rechten Seite, die die Größe veränderbar ist. Ich nehme an, dies bedeutet ein Gitter mit einem Gridsplitter aber etwas verwenden, das tun funktioniert.
  • Ich möchte die Breite der rechten Randspalte in der Lage sein zu sparen, wenn die App geschlossen ist und es zu laden, wenn die Anwendung geöffnet wird, aber dies sollte eine anfängliche Größe sein. Der Benutzer sollte es um die Größe der Lage sein,
  • Wenn ich die Größe des Fensters, möchte ich die linke und rechte Seite Spalten die gleiche Größe und die mittlere Spalte, um die Größe der Fensterbreite bleiben.
  • Die linke und rechte Seite Spalten müssen eine Mindestbreite haben. Als ich die rechte Spalte der Größe mag ich die Spalte Zentrum kleiner werden, aber nicht die linke Spalte.
  • Ich möchte auch in der Lage, die Sichtbarkeit der rechten Spalte mit einem Toggle-Taste, um die außerhalb der Spalte ist und wenn es um die Sichtbarkeit wieder will ich es die gleiche Breite es vorher war sein.

Ich versuche, so viel wie möglich in XAML zu tun und mit der Bindung.

Und kann ich es mit Sahne, Eis und Schokolade-Chips gekrönt, bitte? : -)

War es hilfreich?

Lösung

Wie ich Ihre Anforderungen zu lesen, anstatt zu denken ein Grid, ich denke an einem DockPanel.

<DockPanel>
    <Grid Name="right"
        DockPanel.Dock="Right" MinWidth="100" />
    <Grid Name="Left"
        DockPanel.Dock="Left" MinWidth="100" />
    <Grid Name="middle" />
</DockPanel>

Wenn Sie einen Weg machen right, um die Größe, ändern middle wird dann als right Größe verändert wird. Wenn Sie die Größe des Fensters, wird nur middle ändern. Das Speichern und Einstellen der Width von right liegt an Ihnen, aber sollte nicht schwer sein.

Wie bei dem Benutzer ermöglicht right, um die Größe, die ein bisschen schwieriger, aber ich gefunden dieser Artikel , die helfen sollen. Dieses anderen Artikel könnte noch mehr helfen.

Für die Sichtbarkeit von right ist, wird seine Visibility einstellen Collapsed es zu verbergen und wiederherstellen, indem es auf Visible.

Hinweis: Die Paneele innen müssen nicht Grids sein, aber Sie werden eine Art von Panel für jede verwenden möchten. Was auch immer Sie in Ihren aktuellen Grid Spalten haben sollte gut funktionieren.

Andere Tipps

habe ich ein Gitter mit GridSplitters da dies machte es wirklich einfach, die mittlere Spalte, um die Größe, während die Breite der linken und rechten Spalten beibehalten wird.

XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MainWindow"
    Title="Main Window"
    Width="640" Height="480">

    <Grid>
        <Grid.ColumnDefinitions>
            <!-- Left column -->
                <ColumnDefinition Width="200" MinWidth="100"/>
                <!-- Left GridSplitter column -->
                <ColumnDefinition Width="5"/>
                <!-- Center column. A width of * means the column will fill
                     any remaining space. -->
                <ColumnDefinition Width="*"/>
                <!-- Right GridSplitter column -->
                <ColumnDefinition x:Name="RightSplitterColumn" Width="5"/>
                <!-- Right column -->
                <ColumnDefinition x:Name="RightColumn" Width="200"
                                  MinWidth="100"/>
                </Grid.ColumnDefinitions>
                <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch" />
                <GridSplitter Grid.Column="3" HorizontalAlignment="Stretch" />
                <Button x:Name="ToggleButton" Grid.Column="2"
                        Content="Toggle Right Column" Width="150" Height="25"
                        Click="ToggleButton_Click" />
    </Grid>
</Window>

Code Hinter

Wenn die rechte Spalte versteckt, habe ich nur die Spaltenbreite auf 0, da Rasterspalten keine Sichtbarkeitseigenschaft haben.

public partial class MainWindow : Window
{
    private double rightColumnWidth;
    private double rightColumnMinWidth;
    private bool rightColumnHidden;

    public MainWindow()
    {
        this.InitializeComponent();
    }

    private void ToggleButton_Click(object sender, RoutedEventArgs e)
    {
        if (rightColumnHidden)
        {
            // Restore the widths.
            RightColumn.MinWidth = rightColumnMinWidth;
            RightColumn.Width = new GridLength(rightColumnWidth);
            RightSplitterColumn.Width = new GridLength(5);
        }
        else
        {
            // Remember the user-set widths for the columns.
            rightColumnWidth = RightColumn.Width.Value;
            rightColumnMinWidth = RightColumn.MinWidth;

            // Remember to set the minimum width to 0 before changing the actual
            // width.
            RightColumn.MinWidth = 0;
            RightColumn.Width = new GridLength(0);
            RightSplitterColumn.Width = new GridLength(0);
        }

        rightColumnHidden = !rightColumnHidden;
    }
}

Wie zum Speichern und Wiederherstellen der Spaltenbreiten beim Start, würde ich die Breite Variablen zu einer Einstellungsdatei speichern einfach und sie dann gelten, wenn die App wieder geöffnet wird.

Stellen Sie die Column Breite auf Auto und legt eine Sonde in dieser Spalte und gibt Stern für die anderen Spalten. Jedes Mal, wenn Sie die Spalte mit Inhalt ausblenden möchten, stellen Sie den control.Visibility = Komprimiert und da Spaltenbreite Auto ist, sehen Sie nicht, dass die Spalte und die verbleibenden Spalten werden den Raum nehmen.

3 Jahre später können Sie einen anderen Ansatz auf Codeproject finden.

http://www.codeproject.com/ Artikel / 437.237 / WPF-Grid-Spalte-and-Row-Hiding

Es fügt eine Eigenschaft "Visible", um benutzerdefinierte Spaltendefinitionen.

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