我正在使用带有GridView
的ListView
。是否有GridViewColumn
调整大小的事件?
我正在使用带有GridView
的ListView
。是否有GridViewColumn
调整大小的事件?
我将处理 PropertyChanged
事件。在 Visual Studio 智能感知中看不到 PropertyChanged
事件,但是你可以通过一些小技巧来欺骗它 :)
GridViewColumn column = ...
((System.ComponentModel.INotifyPropertyChanged)column).PropertyChanged += (sender, e) =>
{
if (e.PropertyName == "ActualWidth")
{
//do something here...
}
};
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>
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 ...
}
<ListView Loaded="ListView_Loaded">
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) { ... }