4

我想ListView用某一列填充 WPF 的剩余区域。

我一直在谷歌搜索并找到以下解决方案:

<GridViewColumn Header="Error" DisplayMemberBinding="{Binding ErrorDescription}" 
   Width="{Binding RelativeSource={RelativeSource FindAncestor, 
   AncestorType={x:Type ListView}}, Converter={StaticResource WidtConvert}} />

和转换器:

public object Convert(object value, Type targetType, object parameter,
                      System.Globalization.CultureInfo culture)
{
  ListView l = value as ListView;
  GridView g = l.View as GridView;
  double total = 0;
  for (int i = 0; i < g.Columns.Count - 1; i++)
  {
    total += g.Columns[i].ActualWidth;
  }
  return (l.ActualWidth - total);
}

但问题是,在调用转换器时,包括 在内的所有列ListView.ActualWidth都是 0。

我不想在后面使用任何代码,例如在Listview_SizeChangedetc上。

4

1 回答 1

0

您可以将转换器从后面的代码绑定到 ListView 控件的 Loaded 事件上的 Width 属性。在这种情况下,转换器将在控件完全加载并且实际宽度传输到转换器后被触发。

于 2013-01-23T10:50:51.400 回答