【问题标题】:WPF: GridViewColumn resize eventWPF:GridViewColumn 调整大小事件
【发布时间】:2011-01-13 09:24:38
【问题描述】:

我正在使用 ListViewGridView。有GridViewColumnresize 事件吗?

【问题讨论】:

    标签: c# wpf listview resize gridviewcolumn


    【解决方案1】:

    另一种方法:您可以将更改事件处理程序附加到 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 的类似问题。)

    【讨论】:

      【解决方案2】:
      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">
      

      【讨论】:

      • 请添加一些文字以帮助更好地解释它
      【解决方案3】:

      虽然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>
      

      【讨论】:

        【解决方案4】:

        我将改为处理PropertyChanged 事件。 PropertyChanged 事件在 Visual Studio 智能感知中看不到,但你可以欺骗它:)

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

        【讨论】:

        【解决方案5】:

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

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2019-02-01
          • 2022-10-01
          • 2015-10-04
          • 2014-04-06
          • 2011-07-24
          • 2021-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多