C# GridViewColumn的实际宽度更改时的通知
我试图创建一个包含三列的表,其中中间的列会自动填充可用的水平空间 因此,我听C# GridViewColumn的实际宽度更改时的通知,c#,wpf,C#,Wpf,我试图创建一个包含三列的表,其中中间的列会自动填充可用的水平空间 因此,我听Loaded和SizeChanged事件(用于调整表的大小),并根据简单的计算分配宽度: private void table_Resize(ListView listView) { var _ActualWidth = listView.ActualWidth - gridSplitter.Width - 5; GridView _GridView = listView.View as GridView
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;
}
}
private void table\u Resize(ListView ListView)
{
var_ActualWidth=listView.ActualWidth-gridSplitter.Width-5;
GridView\u GridView=listView.View为GridView;
对于(Int32 i=0;i<\u GridView.Columns.Count;i++)
{
如果(i==1)继续;
_实际宽度-=\u GridView.Columns[i]。实际宽度;
}
如果(_实际宽度>0)
{
_GridView.Columns[1]。宽度=_实际宽度;
}
}
问题是,如果将数据添加到基础的列表视图
,则可能会迫使列更改其宽度
我想当
GridViewColumn
的实际宽度更改(增加)时,我需要我的程序得到通知,以便我可以相应地重新计算列宽。您的子类化解决方案将无法工作。首先,ActualWidth
不是虚拟的afaik,其次,ActualWidth
具有private
setter。如果您检查源代码,您将看到它已经发出通知
你可以这样做:
myColumns[i].PropertyChanged += (sender, e) => {
if(e.PropertyName == "ActualWidth"){
// do something here..
}
}
我想我可以对网格视图列进行子类化,并将代码添加到触发通知的ActualWidth.set
,但我不确定这是如何或是否正确的方法。请发布一些实际代码,以便我们可以帮助您!考虑使用如何改变数据上下文的方式?我认为该列继承自FrameworkElement,因此它没有加载、大小更改事件等。。。你可以做出一种行为来实现一些事情,这就是。。。这应该是(INotifyPropertyChanged)myColumns[i])。PropertyChanged
。