我试图用三列制作一个表,中间的列会自动填充可用的水平空间。
因此,我听取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时通知我的程序,以便能够相应地重新计算列宽。
发布于 2015-01-09 21:07:34
您的子类解决方案将无法工作。首先,ActualWidth不是虚拟的afaik,其次,ActualWidth有private设置器。如果您检查GridViewColumn源代码,您将看到它已经在引发通知。
你可以这样做:
myColumns[i].PropertyChanged += (sender, e) => {
if(e.PropertyName == "ActualWidth"){
// do something here..
}
}https://stackoverflow.com/questions/27865359
复制相似问题