2010-08-04 19 views
28

सबसे अच्छा/सही तरीके से Width="\*"),DataGrid कॉलम का एक सेट है के लिए आनुपातिक चौड़ाई (लेकिन उनके न्यूनतम चौड़ाई के लिए होगा क्या कम से कम उनकी सामग्री की चौड़ाई? फिलहाल, यदि मैं Width="*" का उपयोग करता हूं, तो कॉलम बिल्कुल आनुपातिक रहते हैं, लेकिन कॉलम बहुत पतले होने पर सामग्री फसल हो जाती है। अगर मैं Width="Auto" का उपयोग करता हूं, तो कॉलम स्वयं को पूरी तरह से अपनी सामग्री पर आकार देते हैं, लेकिन यह उन्हें सभी अलग-अलग आकार बनाता है।WPF - चौड़ाई के साथ = "*" DataGrid स्तंभ, लेकिन MinWidth सामग्री फिट

जो मैं चाहता हूं वह वास्तव में दो का संयोजन है, जैसे Width="\*", MinWidth="Auto" ताकि जब अतिरिक्त चौड़ाई हो तो स्तंभ सभी समान चौड़ाई के लिए जगह, लेकिन जब ग्रिड छोटा हो जाता है, सामग्री कभी फसल नहीं हो जाती है।

दुःख की बात है MinWidth="Auto" मौजूद नहीं है, इसलिए मुझे लगता है मैं स्तंभ के MinWidth संपत्ति के लिए बाध्य करने की जरूरत है, लेकिन यह पता लगाने की वास्तव में क्या मैं इसे करने के लिए बाध्य होगा मुश्किल है।

मैं WPF "MinWidth=" कॉलम के व्यापकतम सामग्री के चौड़ाई की चौड़ाई कैसे बता सकता हूं?

+1

हमें मिनीविड्थ = "ऑटो" सेट करने में सक्षम बनाना एक अच्छी सुविधा होगी। –

उत्तर

11

एक्सएएमएल में Width = "Auto" सेट करें।

तब कोड में:

MinWidth = ActualWidth 
Width = new GridLength(1, GridUnitType.Star) 
+1

मेरे लिए काम किया। ग्रिड में सभी कॉलम के माध्यम से लूप करें और उन सभी में उपरोक्त कोड निष्पादित करें। ग्रिड के लोड किए गए ईवेंट – saus

+0

के लिए लूप को एक हैंडलर में रखें, मुझे इस सहायता के साथ भी पता लगाने में थोड़ी देर लग गई। Http://stackoverflow.com/questions/13631694/wpf-datagrid-column-width-auto-and-scrollbar – Brent

18

मैं अपनी थोड़ी देर हो चुकी है, लेकिन मैं अपने प्रश्न मिल गया और एक शुद्ध-XAML समाधान प्रोग्राम किया।

<ColumnDefinition Width="42*" MinWidth="{Binding Path=ActualWidth, ElementName=projectInfoHeader }"/> 

जहां ElementName अधिकतर स्थान लेने वाले नियंत्रण को इंगित करता है। बेशक यह केवल तत्वों के साथ करना संभव है, जिनकी सीमित चौड़ाई है। यदि आप इसे GroupBox के लिए उदाहरण के लिए करते हैं, तो आप केवल बड़ी चौड़ाई का आकार बदल सकते हैं और कभी भी छोटे आकार का आकार बदल सकते हैं।

आप MinWidth के मूल्य के लिए कई उम्मीदवारों है, तो आप अपने आप को एक IMultiValueConverter है, जो, एक वस्तु [] लेता है तैरता करने के लिए इसे पार्स करता है, और अधिकतम (अपने सिर्फ 1 LINQ क्वेरी देता है यदि आप इसे केवल का उपयोग लिखने की ज़रूरत स्वयं और कनवर्टर के खराब उपयोग को संभालने की आवश्यकता नहीं है)

इस तरह MinWidth की गतिशील परिवर्तन का भी समर्थन करता है।

1

XAML में स्तंभ नाम दें:

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" Name="Col1"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
</Grid> 

तब कोड में MinWidth गुण सेट के रूप में नीचे दिखाया गया है:

public MainWindow() 
{ 
    InitializeComponent(); 

    Col1.MinWidth = 340; //enter desired minimum width here 
} 
+0

पर मेरा उत्तर देखें, आप कॉलम विशेषता के रूप में मिनीविड्थ और मैक्सविड्थ जोड़ सकते हैं। कोड को पीछे छूने की जरूरत नहीं है –

2

मैं भी अंदर सही ढंग से आकार ग्रिड कॉलम के लिए समस्या नहीं थी GridViewColumn। मैंने कोशिश की कई चीजें थीं लेकिन फिर मुझे यूनिफॉर्मग्रिड मिला। यह मेरे लिए अंतिम समाधान था। यह सिर्फ काम करता है। मुझे इससे पहले पता नहीं था ... ऐसा लगता है कि यह डिफ़ॉल्ट रूप से वीएस टूलबॉक्स में मौजूद नहीं है (?) और इस प्रकार यह नहीं पता था कि यह भी मौजूद है।

आप here से यूनिफॉर्मग्रिड के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

0

, बस आप स्तंभ

<ColumnDefinition Width="*" MaxWidth="40"/> 

यह उपलब्ध स्थान ले जाएगा की अधिकतम या न्यूनतम चौड़ाई सेट करने के कोड के नीचे का उपयोग कर सकते हैं लेकिन यह

आप minwidth साथ भी ऐसा ही कर सकते हैं अधिकतम 40px को सीमित कर देगा

<ColumnDefinition Width="*" MinWidth="50"/> 

यह उपलब्ध स्थान लेगा लेकिन हमेशा सुनिश्चित करें कि इसमें कम से कम 50px स्थान है। आशा है कि इससे मदद मिलेगी।

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