2014-06-26 9 views
5

मेरे पास बहुत सरल लेआउट, देखो:WPF GridSplitter अजीब व्यवहार जब कॉलम की चौड़ाई = "ऑटो"

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" MinWidth="200"></ColumnDefinition> 
     <ColumnDefinition Width="5"></ColumnDefinition> 
     <ColumnDefinition Width="Auto" MinWidth="50"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" 
      BorderBrush="Red" 
      BorderThickness="2"> 
     <!-- Any picture--> 
     <Image Source="/Resources/PreviewTest.png"></Image> 
    </Border> 
    <GridSplitter Grid.Column="1" 
        Width="5" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Stretch" 
        ResizeBehavior="PreviousAndNext"></GridSplitter> 
    <Expander Grid.Column="2" 
       ExpandDirection="Left" 
       BorderBrush="RoyalBlue" 
       BorderThickness="2"> 
     <!-- Any picture--> 
     <Image Source="/Resources/PreviewTest.png"></Image>  
    </Expander> 
</Grid> 

समस्या: के रूप में दिखाया गया है जब मैं छोड़ दिया करने के लिए GridSplitter खींच रहा हूँ, अधिकार स्तम्भ खिड़की सीमा से बाहर चला जाता है एनीमेशन पर मैंने पाया कि ऐसा तब होता है जब तीसरे कॉलम की चौड़ाई "ऑटो" (Width="Auto") के रूप में सेट की जाती है। अगर मैं Width="*"GridSplitter सेट करता हूं तो ठीक काम करता है और तीसरा Column विंडो सीमा से बाहर नहीं जाता है। तो क्यों Width="Auto" ऐसा होता है?

Demonstration

उत्तर

6

आपकी समस्या तथ्य यह है कि अपने ColumnDefinition रों में से एक Auto के लिए निर्धारित है के कारण होता है। क्या हो रहा है कि जब पहला कॉलम MinWidth मान तक पहुंच जाता है, तो यह कोई छोटा नहीं हो सकता है। हालांकि, अगर आप GridSlitter को आगे बढ़ते रहते हैं, तो सही कॉलम बढ़ना होगा। यह देखते हुए कि आप इसे किसी भी आकार में बढ़ने देते हैं, आपको अपनी वर्तमान समस्या मिलती है।

इसे ठीक करने के लिए आपको बस इतना करना है कि ColumnDefinition.Width संपत्ति * मान पर भी सेट करें। इस तरह, यह Grid से आगे नहीं बढ़ सकता है। यदि आपको आवश्यकता है, तो आप ColumnDefinition.MaxWidth संपत्ति का उपयोग कर कॉलम के अंतिम आकार को नियंत्रित कर सकते हैं। इसे आज़माएं:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" MinWidth="200" /> 
     <ColumnDefinition Width="5" /> 
     <ColumnDefinition Width="*" MinWidth="50" /> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" BorderBrush="Red" BorderThickness="2"> 
     <Image Source="/Resources/PreviewTest.png" /> 
    </Border> 
    <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" VerticalAlignment="Stretch" ResizeBehavior="BasedOnAlignment" /> 
    <Expander Grid.Column="2" ExpandDirection="Left" BorderBrush="RoyalBlue" BorderThickness="2"> 
     <Image Source="/Resources/PreviewTest.png" /> 
    </Expander> 
</Grid> 
संबंधित मुद्दे