2012-01-31 18 views
5

मेरे यूआई:GridViewColumn चौड़ाई समायोजन

<ListView Name="persons" SelectionChanged="persons_SelectionChanged"> 
     <ListView.View> 
      <GridView AllowsColumnReorder="False"> 
       <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="auto"/> 
       <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" Width="auto"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

मेरी यूआई के codebehind:

internal void Update(IEnumerable<Person> pers) 
    { 
     this.persons.ItemsSource = null; 
     this.persons.ItemsSource = pers; 
     UpdateLayout(); 
    } 

मेरे संस्थाओं:

class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

GridViewColumns GridViewColumn-हैडर की चौड़ाई है। भले ही मैं एक लंबे नाम वाले व्यक्तियों के साथ अद्यतन() को कॉल करता हूं। कॉलम का आकार बदल नहीं आता है।

ए) मैं सबसे लंबे नाम की लंबाई में स्वचालित रूप से "नाम" - कॉलम का आकार कैसे बदल सकता हूं (जब मैं अद्यतन कहलाता हूं), लेकिन मान x से अधिक नहीं (मैं कॉलम की अधिकतम चौड़ाई निर्दिष्ट करना चाहता हूं) ?

ख) मैं कैसे है कि "आयु" -Column control's अंत (ताकि gridview के स्तंभों नियंत्रण की पूरी चौड़ाई का उपयोग करता है) के लिए स्थान को भरता निर्दिष्ट कर सकते हैं?

उत्तर

6

ग्रिड व्यू स्वचालित रूप से आकार बदलता नहीं है।

कॉलम आकार बदलने के लिए आप कर सकते हैं

foreach (GridViewColumn c in gv.Columns) 
    { 
     // Code below was found in GridViewColumnHeader.OnGripperDoubleClicked() event handler (using Reflector) 
     // i.e. it is the same code that is executed when the gripper is double clicked 
     // if (adjustAllColumns || App.StaticGabeLib.FieldDefsGrid[colNum].DispGrid) 
     if (double.IsNaN(c.Width)) 
     { 
      c.Width = c.ActualWidth; 
     } 
     c.Width = double.NaN; 
    } 

पिछले आकार क्षेत्र मैं एक कनवर्टर के साथ यह कर भरने के लिए के रूप में। मुझे नहीं लगता कि यह कनवर्टर ठीक वही करता है जो आपको इसके लिए चाहिए लेकिन इसे आपको शुरू करना चाहिए।

<GridViewColumn Width="{Binding ElementName=lvCurDocFields, Path=ActualWidth, Converter={StaticResource widthConverter}, ConverterParameter=100}"> 


    [ValueConversion(typeof(double), typeof(double))] 
    public class WidthConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      // value is the total width available 
      double otherWidth; 
      try 
      { 
       otherWidth = System.Convert.ToDouble(parameter); 
      } 
      catch 
      { 
       otherWidth = 100; 
      } 
      if (otherWidth < 0) otherWidth = 0; 

      double width = (double)value - otherWidth; 
      if (width < 0) width = 0; 
      return width; // columnsCount; 

     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

ग्रिड व्यू तेज़ है लेकिन इसमें थोड़ा बच्चा बैठता है।

+0

मुझे पता है कि यह बहुत पुराना है, लेकिन मैं हाइलाइट करना चाहता हूं, 'कॉलमविड्थ' फिक्स का समय कितना महत्वपूर्ण है और यह सही ढंग से लागू होने पर वास्तव में अच्छा काम करता है। सुनिश्चित करें कि ग्रिड व्यू कंटेनर लोड और दृश्यमान है। मेरे पास एक विस्तारक के अंदर एक ग्रिड व्यू का एक बहुत बुरा संयोजन था जो वर्चुअलाइजिंग पेरेंट कंट्रोल के बदले में था। मतलब, ऑफ़-स्क्रीन होने के दौरान एक आकार बदलना शून्य चौड़ाई उत्पन्न करेगा और जब टेम्पलेट को विभिन्न डेटा के लिए पुनर्नवीनीकरण किया गया था तो आइटम बदल सकते थे। अब मैं अपने समाधान से बहुत खुश हूं। – grek40

1

मैं How to autosize and right-align GridViewColumn data in WPF?

<Window.Resources> 
    <Style TargetType="ListViewItem"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    </Style> 
</Window.Resources> 

कि तुम सब पर मदद से खींच लिया?

+0

मेरे लिए काम किया! धन्यवाद – Omer

संबंधित मुद्दे