سؤال

أنا استخدم ListView مع GridView. وبعد هل هناك GridViewColumn تغيير حجم الحدث؟

هل كانت مفيدة؟

المحلول

القي نظرة على MSDN DRIDVIVIVIVECOLumble التفاصيل. لا يحتوي Appaer على مثل هذا الحدث، ربما بعض الحلول المطلوبة، لست متأكدا من ذلك. يملك انظر هنا

آمل أن يساعد.

نصائح أخرى

سوف تتعامل مع PropertyChanged الحدث بدلا من ذلك. ال PropertyChanged لا ينظر الحدث في Intressisense Visual Studio Intressisense، ولكن يمكنك خداعه :)

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

XAML:

<ListView Loaded="ListView_Loaded">

نهج آخر: يمكنك إرفاق معالج الأحداث تغيير إلى 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.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top