Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GridViewColumn的实际宽度更改时的通知_C#_Wpf - Fatal编程技术网

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