限制WPF数据网格中"自动"列的最大宽度

aKz*_*enT 5 .net wpf layout xaml resize

我有一个标准的WPF网格,其中2列定义为:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" MinWidth="200" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    ...
</Grid>
Run Code Online (Sandbox Code Playgroud)

我想要实现的是第二列根据其内容自动调整大小,第一列获取所有剩余空间.但是我也希望第一列永远不会少于200像素.问题是,使用此配置,我的自动列将被切断而不是调整大小.

我真正想要的是WPF首先为第一列分配200个像素,然后占用所有剩余空间并要求第二列的内容按照剩余宽度的最大大小限制来调整自身大小.如果内容需要的空间较少,则应将剩余空间分配给第一列(使其大于200像素).

使用案例:我的第二列是具有固定宽高比的图像,因此对于给定高度,存在最佳宽度.我还有一个第一列,其中包含一些应始终可见的控件.如果有更多可用空间,我想将空间分配给第一列而不是第二列.

有没有办法用默认的WPF控件实现这一点,还是我需要为此编写自己的Grid?

Joh*_*son 1

我唯一一次看到第二列被切断是当第二列的宽度 + 200 大于网格的宽度时。我玩了一下,也许这对你来说是一个解决方案:

<Grid Height="200"
      Width="600">
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"
                      MinWidth="200" />
    <ColumnDefinition Width="Auto" />
  </Grid.ColumnDefinitions>
  <Border Background="Blue"
          Grid.Column="0" />
  <Viewbox Grid.Column="1"
           Stretch="Uniform"
           MaxWidth="400">
    <Border Background="Yellow"
            BorderBrush="Red"
            BorderThickness="4"
            Height="200"
            Width="300" />
  </Viewbox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

我尝试编写<ColumnDefinition Width="Auto" MaxWidth="400"/>,但 maxwidth 没有效果。

Viewbox 的 MaxWidth 按总宽度计算 - 如果不明显,则保留 200。