2010-02-27 13 views
5

मेरे पास एक डॉकपैनल के अंदर एक टेक्स्टबॉक्स और डेटाग्रिड है जो एक WPF समूह बॉक्स में है।डब्ल्यूपीएफ: ग्रुपबॉक्स गतिशील ऊंचाई

<GroupBox Margin="8,142.04,1.783,230.4" Height="Auto" Header="Desired Meeting Outcomes (decisions or actions)?" MaxWidth="635" MinWidth="550" FontWeight="Bold" FontSize="13.333" BorderBrush="#FFD5DFE5" MinHeight="106" VerticalContentAlignment="Stretch"> 
     <DockPanel Margin="0"> 
      <local:TextboxControl Margin="0" d:LayoutOverrides="Height, HorizontalMargin" Width="538.217" VerticalAlignment="Top" HorizontalAlignment="Left" DockPanel.Dock="Top"/> 
      <local: Height="Auto" HorizontalAlignment="Left" MinHeight="25" MinWidth="538" DockPanel.Dock="Top"/> 
     </DockPanel> 
    </GroupBox> 

मैं पंक्तियों datagrid में dynmaically पाठ बॉक्स से datagrid विकसित करने के लिए पैदा कर रहा द्वारा जोड़ा जा रहा। हालांकि, मेरी ग्रुपबॉक्स की ऊंचाई गतिशील रूप से बढ़ रही नहीं है, भले ही इसकी ऊंचाई ऑटो पर सेट हो। मैं अपने ग्रुपबॉक्स को उस सामग्री के आकार के आधार पर कैसे बढ़ सकता हूं और सिकुड़ सकता हूं?

उत्तर

7

आपके पास स्ट्रेच के वर्टिकल एलाइनमेंट के साथ सभी 4 पक्षों पर मार्जिन सेट है। ग्रिड में यह मूल रूप से आपको एक समूह बॉक्स प्रदान करेगा जो उसके माता-पिता के साथ आकार में है लेकिन इसकी सामग्री नहीं। मार्जिन को दाएं और नीचे से हटाएं और वर्टिकल एलाइनमेंट को शीर्ष पर बदलें।

मार्जिन एल, टी, आर, बी का क्रम है तो पिछले दो में शून्य। ऊंचाई = ऑटो और वर्टिकलकंटेंट एलाइनमेंट = स्ट्रेच डिफ़ॉल्ट हैं ताकि आप उनसे छुटकारा पा सकें। XAML को यथासंभव स्वच्छ रखने की कोशिश करें।

यह मार्कअप से स्पष्ट है कि आप ब्लेंड या विजुअल स्टूडियो के डिजाइनर का उपयोग कर रहे हैं। मैं संपादन के बजाय "पूर्वावलोकन" मोड के लिए डिजाइनर का उपयोग करने का सुझाव दूंगा। हालांकि यह बहुत बेहतर हो गया है, लेकिन मुझे दोनों उत्पादों में डिजाइनर का लेआउट व्यवहार बहुत निराशाजनक लगता है। हाथ से एक्सएएमएल बनाने से परिचित होना लंबे समय तक लाभांश का भुगतान करता है।

उदाहरण

टिप्पणियों के अनुसार, मैं कैसे आप एक डेटा ग्रिड है कि स्वचालित रूप से ऊंचाई के आधार पर विकसित करने के लिए अपनी मूल तत्वों का कारण बनता है के लिए होगा का एक उदाहरण जोड़ रहा। ध्यान दें कि केवल खिड़की के पास एक निश्चित आकार है। खिड़की के लिए, यदि आप इसे ऊंचाई के आधार पर विकसित करना चाहते हैं तो आप SizeToContent = ऊंचाई सेट कर सकते हैं। ध्यान दें कि आपको केवल बाहरी तत्व पर VerticalAlignment = शीर्ष सेट करने की आवश्यकता है।

MainWindow.xaml

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Width="640" Height="480"> 
    <Grid x:Name="LayoutRoot" Background="Green" VerticalAlignment="Top"> 
     <Border Margin="5" BorderBrush="Yellow" BorderThickness="4"> 
      <GroupBox Header="Data Grid" Background="Orange"> 
       <DataGrid x:Name="dg" AutoGenerateColumns="True" /> 
      </GroupBox> 
     </Border> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var items = new ObservableCollection<DateTime>(); 
     dg.ItemsSource = items; 

     var timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromSeconds(2); 
     timer.Tick += (s, e) => items.Add(DateTime.Now); 
     timer.Start(); 
    } 
} 
+0

कि महान काम किया है और मैं ग्रिड में नियंत्रण के आराम करने के इस पर लागू करने में सक्षम था। हालांकि, मेरे पास आपके लिए एक और सवाल है। मेरे ग्रुपबॉक्स के लिए लेआउट रूट एक ग्रिड है। अभी अगर मेरा ग्रुपबॉक्स बहुत बड़ा है तो लेआउट रूट द्वारा नीचे काट दिया जाता है। मैं सामग्री के आधार पर अपना समग्र डब्ल्यूपीएफ आकार बदलने की कोशिश कर रहा हूं। मैंने समूह बॉक्स के लिए एक ही तर्क लागू करने की कोशिश की लेकिन यह काम नहीं कर रहा है। –

+0

मेरा UserControl एक ऐसे रूप में होस्ट किया गया है जो Outlook के ई-मेल फॉर्म के आस-पास के क्षेत्र में है। क्या उपयोगकर्ता ट्रिगर की ऊंचाई बदलते समय मुझे ट्रिगर सेट करने की आवश्यकता है? –

+0

हां, एक आउटलुक क्षेत्र स्वचालित रूप से आकार बदल नहीं जाएगा। सिंक में रखने के लिए आपको ईवेंट कोड का उपयोग करना होगा। – Josh

1

ग्रुपबॉक्स का कंटेनर क्या है? यह इसे बढ़ने से रोक सकता है।

उदाहरण के लिए, यदि कंटेनर विंडोज है, तो क्या इसमें SizeToContent = "ऊंचाई" है?

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