WPF:GridViewColumn调整大小事件

10

我正在使用带有GridViewListView。是否有GridViewColumn调整大小的事件?

5个回答

30

我将处理 PropertyChanged 事件。在 Visual Studio 智能感知中看不到 PropertyChanged 事件,但是你可以通过一些小技巧来欺骗它 :)


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

非常好(+1)。请查看附加属性中此技术的实现:http://wpftoolbelt.codeplex.com/SourceControl/changeset/view/33225#457436。 - Helge Klein

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>

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">

请添加一些文本以帮助更好地解释它。 - Rodrigo Werlang

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) { ... }

(受到这里的答案启发,针对类似DataGrid的问题。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接