GridViewColumn更改其ActualWidth时的通知

时间:2015-01-09 16:52:15

标签: c# wpf

我正在尝试制作一个包含三列的表格,其中中间列会自动填充可用的水平空间。

所以我听取LoadedSizeChanged事件(对于调整表的大小)并根据简单的计算分配宽度:

private void table_Resize(ListView listView)
{
    var _ActualWidth = listView.ActualWidth - gridSplitter.Width - 5;
    GridView _GridView = listView.View as GridView;

    for (Int32 i = 0; i < _GridView.Columns.Count; i++)
    {
        if (i == 1) continue;
        _ActualWidth -= _GridView.Columns[i].ActualWidth;
    }
    if (_ActualWidth > 0)
    {
        _GridView.Columns[1].Width = _ActualWidth;
    }
}

问题在于,当数据添加到基础ListView时,这会强制列更改其宽度。

我认为当ActualWidth的{​​{1}}发生变化(增加)时,我需要我的程序得到通知,以便我可以相应地重新计算列宽。

1 个答案:

答案 0 :(得分:1)

您的子类化解决方案无法正常工作。首先,ActualWidth不是虚拟afaik,其次,ActualWidthprivate setter。如果您检查GridViewColumn源代码,则表示您已经提出通知。

你可以这样做:

myColumns[i].PropertyChanged += (sender, e) => {
  if(e.PropertyName == "ActualWidth"){
    // do something here..
  }
}