Как переключить видимость столбца WPF Grid

Python имеет GOTO

..., и это реализовано внешний модуль чистого Python :)

from goto import goto, label
for i in range(1, 10):
    for j in range(1, 20):
        for k in range(1, 30):
            print i, j, k
            if k == 3:
                goto .end # breaking out from a deeply nested loop
label .end
print "Finished"

15
задан serialhobbyist 17 August 2009 в 10:28
поделиться

3 ответа

Когда я читаю ваши требования, вместо того, чтобы думать о Grid , я думаю о DockPanel .

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

Если вы найдете способ изменить размер вправо , затем в середине изменится, когда вправо изменится размер. Если вы измените размер окна, изменится только средний . Сохранение и установка ширины для справа зависит от вас, но это не должно быть сложно.

Что касается разрешения пользователю изменять размер вправо , это будет немного сложнее, но я нашел эту статью , которая должна помочь. Эта другая статья может помочь еще больше.

Для видимости правого , вы можете установить его Видимость на Свернуто , чтобы скрыть и восстановите его, установив для него значение Visible .

Примечание: Панели внутри не обязательно должны быть Grid s, но вы захотите использовать какую-то Panel для каждой. Все, что у вас есть в текущих столбцах Grid , должно работать нормально.

17
ответ дан 1 December 2019 в 01:45
поделиться

Установите для параметра «Ширина определения столбца» значение «Авто». и поместите элемент управления в этот столбец и поставьте звезду для других столбцов. Каждый раз, когда вы хотите скрыть столбец с содержимым, установите control.Visibility = Collapsed, и, поскольку ширина столбца установлена ​​на Auto, вы не увидите этот столбец, а оставшиеся столбцы займут место.

4
ответ дан 1 December 2019 в 01:45
поделиться

Я использовал Grid с GridSplitters, так как это упростило изменение размера среднего столбца при сохранении ширины левого и правые столбцы.

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-Behind

При скрытии правого столбца я просто устанавливаю ширину столбца равной 0, поскольку столбцы сетки не имеют свойства видимости.

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;
    }
}

Что касается сохранения и восстанавливая ширину столбцов при запуске, я бы просто сохранил переменные ширины в файле настроек, а затем применил их при повторном открытии вашего приложения.

8
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: