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

标签 wpf xaml datagrid width datagridcolumn

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

我真正想要的是两者的结合,比如 Width="\*" , MinWidth="Auto"这样当有额外的宽度时,列将全部间隔到相等的宽度,但是当网格变小时,内容永远不会被裁剪。

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

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

最佳答案

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

 <ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/> 
ElementName指向占据大部分空间的控件。当然,这仅适用于宽度有限的元素。
例如,如果您为 GroupBox 这样做, 比你只能调整到更大的宽度而永远不会调整到更小的宽度。

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

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

关于WPF - 宽度为 ="*"的 DataGrid 列,但 MinWidth 以适合内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3404067/

相关文章:

C++ 如何加载 .NET 运行时,从而托管 WPF 组件

c# - 如何单击 RibbonMenuButton .Net

.net - 有没有办法在不命名目标控件的情况下使用 Wpf 标签的目标?

c# - 在 C# 中以编程方式调整 wpf 窗口的大小

c# - 如何覆盖 DataGridRow 模板中的 AlternatingRowBackground?

WPF MVVM DataGridColumnHeader DisplayName

c# - 在 View 模型中创建控件实例

c# - 应用于文本框的文本属性的 DataTrigger 会导致其绑定(bind)停止工作

c# - Oxyplot 中的仿射变换

c# - 将动态数据绑定(bind)到 rowdetails 模板内的 wpf datagrid