10

で使用ListViewしていGridViewます。GridViewColumnサイズ変更イベントはありますか?

4

5 に答える 5

30

PropertyChanged代わりにイベントを処理します。PropertyChangedイベントはVisualStudioインテリセンスには表示されませんが、だましてはかまいません:)

 GridViewColumn column = ...
 ((System.ComponentModel.INotifyPropertyChanged)column).PropertyChanged += (sender, e) =>
 {
     if (e.PropertyName == "ActualWidth")
     {
         //do something here...
     }
 };
于 2010-02-16T01:55:03.320 に答える
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>
于 2010-02-05T12:33:38.600 に答える
3

MSDNDridViewColumnの詳細をご覧ください。そのようなイベントが発生することはないようですが、おそらくいくつかの回避策が必要ですが、私にはわかりません。ここを見てください

それが役に立てば幸い。

于 2010-02-05T05:05:21.253 に答える
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">
于 2018-04-16T15:52:33.697 に答える
0

Width別のアプローチ:変更イベントハンドラーをGridViewColumnプロパティにアタッチできます。

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に関する同様の質問については、ここでの回答に触発されています。)

于 2019-06-20T21:38:26.997 に答える