WPF:GridViewColumn调整大小事件

时间:2010-02-05 04:57:35

标签: c# wpf listview resize gridviewcolumn

我正在ListView使用GridView。是否有GridViewColumn调整大小事件?

5 个答案:

答案 0 :(得分:29)

我会处理PropertyChanged事件。在Visual Studio intellisense中看不到PropertyChanged事件,但你可以欺骗它:)

 GridViewColumn column = ...
 ((System.ComponentModel.INotifyPropertyChanged)column).PropertyChanged += (sender, e) =>
 {
     if (e.PropertyName == "ActualWidth")
     {
         //do something here...
     }
 };

答案 1 :(得分:4)

虽然GridViewColumn似乎没有Resize事件,但您可以绑定到ColumnWidth属性。

您可以使用下面的示例XAML验证这一点 - 此示例不需要代码。它仅在一个方向上绑定,从列宽到文本框,当您调整大小时,您将看到文本框立即以列宽更新。

(这只是一个简单的例子;如果你想在代码中选择调整大小,我会创建一个具有Width属性的类,因此绑定将在两个方向都有效。)

<StackPanel>
    <ListView>
        <ListView.View>
            <GridView>
                <GridViewColumn Width="{Binding ElementName=tbWidth1, Path=Text, Mode=OneWayToSource}"  />
                <GridViewColumn Width="{Binding ElementName=tbWidth2, Path=Text, Mode=OneWayToSource}"  />
            </GridView>
        </ListView.View>
        <ListViewItem>Item 1</ListViewItem>
        <ListViewItem>Item 2</ListViewItem>
    </ListView>
    <TextBox Name="tbWidth1" />
    <TextBox Name="tbWidth2" />
</StackPanel>

答案 2 :(得分:3)

看看 MSDN DridViewColumn details它似乎没有这样的事件,可能需要一些解决方法,但我不确定。有look here

希望它有所帮助。

答案 3 :(得分:1)

private void ListView_Loaded( object sender, RoutedEventArgs e )
{
     // Add the handler to know when resizing a column is done
     ((ListView)sender).AddHandler( Thumb.DragCompletedEvent, new   DragCompletedEventHandler( ListViewHeader_DragCompleted ), true );
}

private void ListViewHeader_DragCompleted( object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e )
{
     ListView lv = sender as ListView;
    ... code handing the resize goes here ...
}

XAML:

<ListView Loaded="ListView_Loaded">

答案 4 :(得分:0)

另一种方法:您可以将更改事件处理程序附加到GridViewColumn Width属性:

PropertyDescriptor pd = DependencyPropertyDescriptor.FromProperty(
    GridViewColumn.WidthProperty, typeof(GridViewColumn));
GridView gv = (GridView)myListView.View;
foreach (GridViewColumn col in gv.Columns) {
    pd.AddValueChanged(col, ColumnWidthChanged);
}

...

private void ColumnWidthChanged(object sender, EventArgs e) { ... }

(受答案here的启发,针对有关DataGrid的类似问题。)