Сетки WPF — как сохранить ширину столбца при изменении размера окна?

#c# #.net #wpf #xaml

#c# #.net #wpf #xaml

Вопрос:

У меня есть эта разметка XAML…

 <Grid Name="ProductsGrid" Width="500">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="ProductList" Width="*" />
            <ColumnDefinition Name="ProductInfo" Width="100" MinWidth="10" MaxWidth="100"/>
        </Grid.ColumnDefinitions>
 

При запуске приложения ширина 2-го столбца равна 100 «единицам».

При изменении размера окна столбец увеличивается и уменьшается — он сохраняет свое соотношение со столбцом 1, что, я думаю, и должно было произойти в WPF. Поэтому, когда приложение запускается, размер окна устанавливается равным 500, а 2-й столбец составляет 1/5 от общей ширины. При изменении размера приложения оно сохраняет 1/5 от общей ширины, однако в этом примере я хочу, чтобы оно оставалось на уровне 100 единиц.

Есть идеи?

Комментарии:

1. Я попробовал ваш xaml, и второй столбец остается на 100 пикселей, как и должно быть. Попробуйте это в новом окне тестового приложения. Проблема может быть вне этого xaml или внутри содержимого сетки.

Ответ №1:

Удалите ширину сетки, она фиксирует ширину сетки, ширина сетки остается 100… укажите цвет фона сетки, если вы хотите увидеть фактическое расположение сетки.

вы можете зафиксировать начальную ширину главного окна на 100 и оставить сетку без фиксированной ширины, чтобы обеспечить желаемое поведение

попробуйте это:

 <Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"  Width="100" x:Name="MyWindow">
    <Grid Name="ProductsGrid">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Name="ProductList" Width="*" />
                <ColumnDefinition Name="ProductInfo" Width="100" MinWidth="10" MaxWidth="100"/>
            </Grid.ColumnDefinitions>
 

Ответ №2:

Попробуйте это

 <Grid Name="ProductsGrid"  ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="ProductList" Width="*" />
            <ColumnDefinition Name="ProductInfo" Width="100" MinWidth="10" MaxWidth="100"/>
        </Grid.ColumnDefinitions>
    </Grid>
 

Вам нужно удалить фиксированную ширину сетки.

Если вы хотите, чтобы ваше начальное окно имело размер 500, вы можете обработать window loaded event и установить размер window 500. Не вводите жесткий размер сетки в коде или XAML, иначе вы снова столкнетесь с той же проблемой

  private void mywindow_Loaded(object sender, RoutedEventArgs e)
            {
                this.Width = 500;
            }