首页 文章

WPF - DataGrid列,宽度=“*”,但MinWidth适合内容

提问于
浏览
29

使一组 DataGrid 列具有比例宽度的最佳/正确方法是什么( Width="\*"), 但要使其 minimum 宽度至少为其内容的宽度?目前,如果我使用 Width="*" ,则列保持完全成比例,但是如果列变得太薄,内容会被裁剪 . 如果我使用 Width="Auto" ,那么列的大小完全适合它们的内容,但这会使它们具有不同的大小 .

我想要的实际上是两者的组合,如 Width="\*"MinWidth="Auto" ,这样当有额外的宽度时,列将全部空出宽度相等,但是当网格变小时,内容永远不会被裁剪 .

可悲的是, MinWidth="Auto" 并没有't exist, so I guess I need to bind the column'属性,但很难弄明白我将它绑定到什么 .

如何告诉WPF "MinWidth=" 列的最宽内容的宽度?

4 回答

  • 2

    我知道它有点晚了,但我找到了你的问题并编写了一个纯XAML解决方案 .

    <ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/>
    

    ElementName 指向控制占据了大部分空间 . 当然这只能用于宽度有限的元素 . 例如,如果您为 GroupBox 执行此操作,则只能调整为较大的宽度,而不会调整为较小的宽度 .

    如果你有几个 MinWidth 值的候选者,你需要给自己写一个 IMultiValueConverter ,它接受一个object [],将它解析为浮点数,并返回最大值(如果你只使用它自己而且只是1个linq查询)需要处理转换器的不良用法)

    这种方式还支持动态更改 MinWidth .

  • 18

    在XAML中设置 Width = "Auto" .

    然后在代码中:

    MinWidth = ActualWidth
    Width = new GridLength(1, GridUnitType.Star)
    
  • 12

    我也有问题在GridViewColumn内正确调整Grid列的大小 . 我尝试了几件事,但后来我发现了UniformGrid . 这是我的终极解决方案 . 它只是有效 . 我以前不知道...似乎默认情况下它在VS工具箱中不存在(?),因此甚至不知道它存在 .

    你可以从here找到更多关于UniformGrid的信息 .

  • 1

    在XAML中为列命名:

    <Grid>
          <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="*" Name="Col1"/>
                 <ColumnDefinition Width="*"/>
          </Grid.ColumnDefinitions>
    </Grid>
    

    然后在代码中设置 MinWidth 属性,如下所示:

    public MainWindow()
    {
        InitializeComponent();
    
        Col1.MinWidth = 340; //enter desired minimum width here
    }
    

相关问题