【问题标题】:WPF DataGrid Row Header Visibility ErrorWPF DataGrid 行标题可见性错误
【发布时间】:2012-01-30 19:15:26
【问题描述】:

我正在使用 DataGrid 来显示几个字段,其中一个是多行描述。在我尝试通过设置HeadersVisibility="Column" 来隐藏标题行之前,网格会很好地显示数据。标题行消失了,但是当我滚动行标题时,一些随机行重新出现。

我已将范围缩小到显示多行描述的列。只要我关闭此列,那么我就没有这个问题。我试过用"\r\n" 和"\n" 来分隔这些行,但都不管用。 DataGrid 是否支持多行文本字段?

下面是一张图片,展示了正在发生的事情以及我用来创建网格的 XAML。

<DataGrid DataContext="{StaticResource personRepository}"
          ItemsSource="{Binding PersonList, Mode=OneWay}"
          AutoGenerateColumns="False"
          HeadersVisibility="Column"
          CanUserSortColumns="False"
          SelectionMode="Extended"
          IsReadOnly="True">

    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Width="80" Binding="{Binding Id, Mode=OneWay}" />
        <DataGridTextColumn Header="First Name" Width="150" Binding="{Binding FirstName, Mode=OneWay}" />
        <DataGridTextColumn Header="Last Name" Width="150" Binding="{Binding LastName, Mode=OneWay}" />
        <DataGridTextColumn Header="Description" Width="*" Binding="{Binding Description, Mode=OneWay}" />
    </DataGrid.Columns>
</DataGrid>

【问题讨论】:

  • “隐藏标题行”是什么意思? HeadersVisibility = "Column" 是默认值。之前的设置是什么(有效)?如果这是只读的,我会使用 ListView GridView。更多 XAML,但我认为您可以更好地控制格式。对于内容,使用 TextBlock 并为描述设置 Wrap on。
  • 默认为 HeadersVisibility=All。标题行很小,但它就在那里。我从 GridView 开始,但列宽不接受“*”符号,因此最后一列将填充剩余空间。
  • 您必须在 GridView 中使用 * 转换器。如果您愿意,我会将其发布为答案。

标签: c# .net wpf xaml wpfdatagrid


【解决方案1】:

在这种情况下,lvCurDocFields 是父 ListView。这里的缺点是您需要为其他列设置硬宽度,然后这些其他列的总和就是 ConverterParameter。如果你有一个垂直滚动条,那么留下大约 20 个。GridView 有点痛苦,但我喜欢这个演示文稿,因为只读它比 DataGrid 更有效

<GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}">

[ValueConversion(typeof(double), typeof(double))]
public class WidthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // value is the total width available
        double otherWidth;
        try
        {
            otherWidth = System.Convert.ToDouble(parameter);
        }
        catch
        {
            otherWidth = 100;
        }
        if (otherWidth < 0) otherWidth = 0;

        double width = (double)value - otherWidth;
        if (width < 0) width = 0;
        return width; // columnsCount;

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

【讨论】:

    【解决方案2】:

    尝试设置RowHeaderWidth = 0 而不是HeaderVisibility

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2017-07-23
      • 2014-10-30
      • 1970-01-01
      • 2010-12-01
      • 2018-07-28
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多