当 GridViewColumn 的 ActualWidth 改变时的通知
Notification when GridViewColumn has its ActualWidth changed
我正在尝试制作一个包含三列的 table,其中中间列自动填充可用的水平 space。
所以我监听 Loaded
和 SizeChanged
事件(当 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
时,这可能会强制列更改其宽度。
我想我需要我的程序在 GridViewColumn
的 ActualWidth
改变(增加)时得到通知,以便我可以相应地重新计算列宽。
您的子类化解决方案将不起作用。首先,ActualWidth
不是虚拟 afaik,其次,ActualWidth
有 private
setter。如果您检查 GridViewColumn 源代码,您会看到它已经发出通知。
你可以这样做:
myColumns[i].PropertyChanged += (sender, e) => {
if(e.PropertyName == "ActualWidth"){
// do something here..
}
}
我正在尝试制作一个包含三列的 table,其中中间列自动填充可用的水平 space。
所以我监听 Loaded
和 SizeChanged
事件(当 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
时,这可能会强制列更改其宽度。
我想我需要我的程序在 GridViewColumn
的 ActualWidth
改变(增加)时得到通知,以便我可以相应地重新计算列宽。
您的子类化解决方案将不起作用。首先,ActualWidth
不是虚拟 afaik,其次,ActualWidth
有 private
setter。如果您检查 GridViewColumn 源代码,您会看到它已经发出通知。
你可以这样做:
myColumns[i].PropertyChanged += (sender, e) => {
if(e.PropertyName == "ActualWidth"){
// do something here..
}
}