当 GridViewColumn 的 ActualWidth 改变时的通知

Notification when GridViewColumn has its ActualWidth changed

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

所以我监听 LoadedSizeChanged 事件(当 table 调整大小时)并根据简单计算分配宽度:

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 时,这可能会强制列更改其宽度。

我想我需要我的程序在 GridViewColumnActualWidth 改变(增加)时得到通知,以便我可以相应地重新计算列宽。

您的子类化解决方案将不起作用。首先,ActualWidth 不是虚拟 afaik,其次,ActualWidthprivate setter。如果您检查 GridViewColumn 源代码,您会看到它已经发出通知。

你可以这样做:

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