2009-02-17 16 views
6

मैं संस्करण 2.0 का उपयोग कर सिल्वरलाइट पर बस शुरुआत कर रहा हूं। मैं पेज पर कुछ डेटा ग्रिड दिखाना चाहता था और इसे ग्रिड सेल में छोड़कर ठीक हो गया। मैं तो सोचा था कि मैं निम्न मार्कअप का उपयोग कर एक ग्रिड विभाजक जोड़ने की कोशिश करेंगे:सिल्वरलाइट ग्रिड स्प्लिटर अप्रत्याशित व्यवहार

<UserControl xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightApplication1.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Loaded="UserControl_Loaded"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <basics:GridSplitter Grid.RowSpan="2" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Width="5" VerticalAlignment="Stretch" ></basics:GridSplitter> 
     <data:DataGrid Name="TLGrid" Grid.Row="0" Grid.Column="0"> 
     </data:DataGrid> 
     <data:DataGrid Name="TRGrid" Grid.Row="0" Grid.Column="2"> 
     </data:DataGrid> 
     <data:DataGrid Name="BLGrid" Grid.Row="1" Grid.Column="0"> 
     </data:DataGrid> 
     <data:DataGrid Name="BRGrid" Grid.Row="1" Grid.Column="2"> 
     </data:DataGrid> 
    </Grid> 
</UserControl> 

मैं अन्य दो स्तंभों का आकार बदलने के चारों ओर स्प्लिटर खींचें करने में सक्षम होने की उम्मीद। जब मैं बार खींचता हूं, तो दोनों अन्य कॉलम कम हो जाते हैं। क्या कोई समझा सकता है क्यों?

उत्तर

7

आपको ग्रिडप्लिटर के लिए मध्य कॉलम की आवश्यकता नहीं है। यदि आप स्प्लिटर को कॉलम 0 में डालते हैं तो ग्रिडप्लिटर कॉलम 0 के दाएं किनारे से जुड़ जाएगा। आप बाईं ओर ग्रिड में एक छोटा मार्जिन जोड़ सकते हैं ताकि आप पिछले 5 पिक्सल न खोएं।

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*"/> 
     <!--<ColumnDefinition Width="Auto"/>--> 
     <ColumnDefinition Width="1*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 

    <data:DataGrid Name="TLGrid" Grid.Row="0" Grid.Column="0" /> 
    <data:DataGrid Name="BLGrid" Grid.Row="1" Grid.Column="0"/> 

    <!-- Moved the grid splitter to column 0 --> 
    <basics:GridSplitter Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" Width="5" /> 

    <data:DataGrid Name="TRGrid" Grid.Row="0" Grid.Column="2" /> 
    <data:DataGrid Name="BRGrid" Grid.Row="1" Grid.Column="2" />   
</Grid> 
+0

धन्यवाद, यह पूरी तरह से काम करता है। स्पष्टीकरण के लिए –

8

कारण कोशिकाओं तरीके आप अनुभव किया है में आकार बदलने ColumnDefinition मूल्यों और GridSplitter की HorizontalAlignment करने के लिए नीचे है। चूंकि आपने ऊंचाई निर्दिष्ट नहीं की है, कॉलम चौड़ाई स्टार पर डिफ़ॉल्ट है। इसका मतलब है कि उनके बराबर दूरी है। GridSplitterHorizontalAlignment तब निर्दिष्ट करता है कि यह किस दिशा का आकार बदलता है। यदि आप इसे केंद्र या खिंचाव करते हैं, तो आप दोनों पक्षों का आकार बदल देंगे, लेकिन यदि आप इसे एक किनारे या दूसरे पर संरेखित करेंगे, तो यह केवल उस किनारे का आकार बदल देगा, लेकिन क्योंकि कोशिकाएं समान रूप से स्थान साझा करती हैं, दोनों पक्ष केवल एक के बजाय घटते हैं।

हालांकि स्वीकार्य उत्तर इस काम को पाने के लिए एक वैकल्पिक दृष्टिकोण प्रदान करता है, लेकिन यह वास्तव में यह नहीं बताता कि समस्या क्यों होती है। यह अपने स्वयं के कोशिकाओं में एक स्प्लिटर डालने के लिए पूरी तरह से स्वीकार्य है - वास्तव में, इसकी अक्सर अनुशंसा की जाती है।

+0

धन्यवाद। यह भी मेरी समस्या हल हो गई। – beaudetious

+0

@beaudetious: मुझे खुशी है कि मैं मदद कर सकता हूं। :) –

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