【问题标题】:How to adjust width of column to content?如何将列的宽度调整为内容?
【发布时间】:2021-10-25 09:52:11
【问题描述】:

我在数据网格中有一个列,我正在使用多值转换器设置 textblck 的宽度。但是列的宽度没有被修改。我希望宽度列根据 texblock 的内容进行调整。

专栏是这样的:

            <DataGridTextColumn Header="Columna2" Binding="{Binding}" Width="AUTO">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="HorizontalAlignment" Value="Left"/>
                        <Setter Property="Background" Value="Orange"/>
                        <Setter Property="Width">
                            <Setter.Value>
                                <MultiBinding Converter="{StaticResource MiMultiValueConverter}">
                                    <Binding Path="UseConverterIsChecked" Source="{StaticResource vm}"/>
                                    <Binding Path="WidthColumn2" Source="{StaticResource vm}"/>
                                </MultiBinding>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>

我知道文本块的大小调整正确,因为我设置了背景以查看文本块的实际大小。

这是原始尺寸:

这是转换器设置文本块值的时候:

如何调整列的大小?

谢谢。

编辑:

如果我按照某些评论中的建议使用水平拉伸,我会得到以下结果:

编辑:

这是 MiMultiValueConverter 的代码:

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
    bool miBlUsarConverter = (bool)values[0];
    double miDbAncho = (double)values[1];

    return (miBlUsarConverter) ? miDbAncho : 200;
}

【问题讨论】:

  • 你为什么要设置WidthTextBlock要调整列宽?这没有道理。为什么不设置列宽?

标签: wpf datagrid


【解决方案1】:

您正在设置 DataGrid 列中包含的元素的宽度,而不是实际列。调整列大小的正确方法是设置 DataGridTextColumn 本身的 width 属性:

<DataGridTextColumn Header="Columna2" Binding="{Binding}" Width="1*">

在您的情况下,您需要用上面的绑定替换它。

更多信息,这里是官方文档:https://docs.microsoft.com/en-us/dotnet/desktop/wpf/controls/sizing-options-in-the-datagrid-control?view=netframeworkdesktop-4.8

【讨论】:

  • 我试过水平对齐作为拉伸,但结果不是预期的。我已经在原帖中添加了结果。
  • 我误解了你的问题。您的转换器所做的是调整列中包含的元素的大小,而不是列本身。我将编辑我的答案。
  • 我已经添加了转换器的代码。
  • 我已经尝试在 DataGridTextColumn 中使用 width="1*" 但它不起作用,当我调整到比列的实际宽度更低的宽度时,列不会调整大小。
  • 你应该用你的绑定替换 1*
猜你喜欢
  • 2011-09-06
  • 2016-12-15
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 2013-10-31
  • 2011-02-01
  • 2018-11-04
  • 1970-01-01
相关资源
最近更新 更多