我正在尝试制作一个包含三列的表格,其中中间列会自动填充可用的水平空间。
所以我听取Loaded
和SizeChanged
事件(对于调整表的大小)并根据简单的计算分配宽度:
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}}发生变化(增加)时,我需要我的程序得到通知,以便我可以相应地重新计算列宽。
答案 0 :(得分:1)
您的子类化解决方案无法正常工作。首先,ActualWidth
不是虚拟afaik,其次,ActualWidth
有private
setter。如果您检查GridViewColumn源代码,则表示您已经提出通知。
你可以这样做:
myColumns[i].PropertyChanged += (sender, e) => {
if(e.PropertyName == "ActualWidth"){
// do something here..
}
}