2009-10-21 15 views
9

मेरे पास निम्नलिखित सरल WPF ग्रिड, दो कॉलम, प्रत्येक कॉलम में एक बटन, पहला कॉलम ऑटो आकार और कॉलम आकार बदलने की अनुमति देने के लिए एक स्प्लिटर है। स्प्लिटर माउसडब्लिकक्लिक ईवेंट पर एक इवेंट हैंडलर स्थापित किया गया है। जब स्प्लिटर डोलबल होता है तो बाएं कॉलम में बटन क्लिक किया जाता है।डब्ल्यूपीएफ ग्रिड - सामग्री आकार दृश्यता पर सेट होने पर ऑटो आकार का कॉलम ढहना नहीं है।

अब, कॉलम 1 ऑटो आकार का है और सामग्री ध्वस्त हो गई है, मैं इस बिंदु पर अपेक्षा करता हूं कि स्तंभ 1 को प्रभावी रूप से छुपाया जाना चाहिए, हालांकि यह नहीं है। हालांकि इसकी सामग्री ध्वस्त हो गई है, कॉलम आकार बदलता नहीं है (रीमेम्बर कॉलम ऑटोोज़ाइज्ड है)।

मुझे अजीब लगता है, मैं कॉलम को पतन करना चाहता हूं - कोई विचार यहां क्या हो रहा है?

<Window x:Class="KingLayout.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 
     <Button x:Name="leftButton">Left</Button> 
     <Button Grid.Column="1" Margin="5,0,0,0">Right</Button> 
     <GridSplitter Name="verticalSplitter" ShowsPreview="True" Grid.RowSpan="1" Grid.Column="1" HorizontalAlignment="Left" 
         VerticalAlignment="Stretch" Width="5" MouseDoubleClick="verticalSplitter_MouseDoubleClick"/> 
    </Grid> 
</Window> 


    private void verticalSplitter_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     leftButton.Visibility = leftButton.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
    } 

उत्तर

8

क्या हो रहा है कि जब आप GridSplitter साथ स्तंभ/पंक्ति चौड़ाई/ऊंचाई का आकार बदलने के लिए, यह स्तंभ/पंक्ति की ActualHeight (या ActualWidth) सेट करता है।

आपके नियंत्रण को ध्वस्त होने पर आपको पंक्ति की ऊंचाई को ऑटो (या शून्य) पर सेट करने के लिए ट्रिगर का उपयोग करना चाहिए।

मुझे इसके साथ अपडेट करें।

-3

यह क्योंकि स्प्लिटर ग्रिड में अपनी स्थिति रहती है, यह पहले कॉलम खींचती है, यही कारण है कि आप एक विस्तारक कोशिश मत करो है?

<Grid ShowGridLines="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <Expander ExpandDirection="Left"> 
     <Button x:Name="leftButton">Left</Button> 
    </Expander> 
    <Button Grid.Column="1" Margin="5,0,0,0">Right</Button> 
</Grid> 
+1

चिंता एक विस्तारक का उपयोग करने के बारे में नहीं है, यह समस्या को ठीक करने के बारे में है। – esylvestre

+0

@esylvestre हुह? – Carlo

0

मेरे मामले में, मैं स्टैकपैनल्स का उपयोग करने और Visibility="Collapsed" सेट करने में सक्षम था जिसके कारण इसे ठीक से आकार बदलना पड़ा।

<StackPanel Orientation="Vertical" Margin="5"> 
    <StackPanel Orientation="Horizontal"> 
     <!-- Some controls --> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Visibility="{Binding YourVisibilityProperty}"> 
     <!-- Some controls --> 
    </StackPanel> 
</StackPanel> 
संबंधित मुद्दे