WPF网格 - 如何在调整窗口大小时保持列宽?

时间:2011-10-23 15:33:24

标签: 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>

当应用程序启动时,第二列的宽度为100“单位”。

当窗口调整大小时,列会增长和缩小 - 它保持与第1列的比率,我认为这是我应该在WPF中发生的事情。因此,当应用程序启动时,窗口大小设置为500,第二列是总宽度的1/5。随着应用程序调整大小,它保持总宽度的1/5。但在此示例中,我希望它保持在100个单位。

有什么想法吗?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

试试这个

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

您需要删除Grid的固定宽度。

如果您希望初始窗口的大小为500,那么您可以处理window loaded event并将window的大小设置为500.不要在后面的代码中硬编码Grid的大小,否则硬编码XAML你将再遇到同样的问题

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