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

And*_*y T 32 wpf xaml datagrid width datagridcolumn

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

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

可悲的是,MinWidth="Auto"不存在,所以我想我需要绑定列的MinWidth属性,但很难弄清楚我将它绑定到什么.

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

Tom*_*sup 19

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

 <ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/> 
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 12

设置Width = "Auto"在XAML中.

然后在代码中:

MinWidth = ActualWidth
Width = new GridLength(1, GridUnitType.Star)
Run Code Online (Sandbox Code Playgroud)