2008-11-10 14 views
5

डब्ल्यूपीएफ ग्रिडस्प्लिटर मेरी ग्रिड को मेरी खिड़की से बड़ा बनाता है!मैं डब्ल्यूपीएफ ग्रिडस्प्लिटर को अपने ग्रिड के आकार को बदलने से कैसे रोकूं?

मुझे एक ग्रिडस्प्लिटर के साथ एक डब्ल्यूपीएफ ग्रिड मिला है। अगर मैं अपने कॉलम का आकार बदलता हूं, तो मैं अपनी ग्रिड को अपनी खिड़की से अधिक और गैर-देखने योग्य बना सकता हूं।

यह इस तरह शुरू होता है:

WPF GridSplitter http://img201.imageshack.us/img201/1804/twomy6.jpg

मैं क्या कर रहा हूँ:

WPF Grid http://img201.imageshack.us/img201/9505/onehg6.jpg

लेकिन बाएँ स्तंभ को चौड़ा करने के बाद, मैं अब अधिकार स्तम्भ (हरा) देख सकते हैं गलत? मैं ग्रिडस्प्लिटर को अपने ग्रिड के आकार को बदलने से कैसे रोकूं?


अद्यतन:

मैं अभी भी इस के साथ संघर्ष कर रहा हूँ। अब मैंने ग्रिड के भीतर घोंसले की ग्रिड की कोशिश की है। इससे मदद नहीं मिली। यहाँ मेरी XAML ColumnDefinitions, RowDefinitions, और GridSplitters है ...

<Window ... > 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" MinWidth="150" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" MinWidth="400" /> 
     </Grid.ColumnDefinitions> 
     <GridSplitter 
      ResizeDirection="Columns" 
      ResizeBehavior="BasedOnAlignment" 
      Grid.Column="1" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Stretch" 
      Width="2" 
      Margin="0,5,0,5" 
      Panel.ZIndex="1"/> 
     <Grid Grid.Column="0"> 
      ... 
     </Grid> 
     <Grid Grid.Column="2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" MinWidth="150" /> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" MinWidth="200" /> 
      </Grid.ColumnDefinitions> 
      <GridSplitter 
       ResizeDirection="Columns" 
       ResizeBehavior="PreviousAndNext" 
       Grid.Column="1" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Stretch" 
       Width="2" 
       Margin="0,5,0,5" 
       Panel.ZIndex="1"/> 
      <Grid Grid.Column="0"> 
       ... 
      </Grid> 
      <Grid Grid.Column="2"> 
       ... 
      </Grid> 
     </Grid> 
    </Grid> 
</Window> 

अद्यतन:

मुझे लगता है कि समस्या WebBrowser नियंत्रण के साथ है। नया प्रश्न देखें:

WPF GridSplitter Doesn't Work With WebBrowser Control?

+0

क्या आपकी विंडो में मैक्सविड्थ सेट है? – BrainSlugs83

उत्तर

3

यदि आपका विंडो आकार दिया जाता है, ताकि इसकी चौड़ाई अपने कॉलम 'MinWidths की राशि से कम है, तो आप स्तंभ काट देखेंगे, लेकिन अन्यथा मैं आपकी समस्या को पुन: पेश नहीं कर सकते हैं:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition MinWidth="150" Width="*"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition MinWidth="400" Width="*"/> 
     </Grid.ColumnDefinitions> 
     <GridSplitter 
      Width="2" 
      Grid.Column="1" 
      HorizontalAlignment="Center" 
      Margin="0,5,0,5" 
      Panel.ZIndex="1" 
      VerticalAlignment="Stretch" 
      ResizeBehavior="BasedOnAlignment" 
      ResizeDirection="Columns"/> 
     <Grid Grid.Column="0"> 
      <Border Background="Red" Margin="5"/> 
     </Grid> 
     <Grid Grid.Column="2"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition MinWidth="150" Width="*"/> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition MinWidth="200" Width="*"/> 
      </Grid.ColumnDefinitions> 
      <GridSplitter 
       Width="2" 
       Grid.Column="1" 
       HorizontalAlignment="Center" 
       Margin="0,5,0,5" 
       Panel.ZIndex="1" 
       VerticalAlignment="Stretch" 
       ResizeBehavior="PreviousAndNext" 
       ResizeDirection="Columns"/> 
      <Grid Grid.Column="0"> 
       <Border Background="Green" Margin="5"/> 
      </Grid> 
      <Grid Grid.Column="2"> 
       <Border Background="Blue" Margin="5"/> 
      </Grid> 
     </Grid> 
    </Grid> 
</Window> 

लाल कॉलम का विस्तार, यह केवल तभी विस्तारित होगा जब तक कि सही कॉलम 400 के अपने मिनीविड्थ तक पहुंच न जाए, यह पृष्ठ से इसे बूट नहीं करेगा।

यह संभव आप विंडो या सबसे बाहरी ग्रिड है कि इस व्यवहार का कारण होता है की अन्य संपत्तियों स्थापित कर रहे है ...

+0

मुझे यह गैर-वेब ब्राउज़र कॉलम के लिए मनमाने ढंग से उच्च मैक्सविड्थ मान सेट करके काम करने के लिए मिला है जैसा कि आपने इस अन्य प्रश्न में प्रदर्शित किया है: http://stackoverflow.com/questions/375841/wpf-gridsplitter-doesnt-work-with -webbrowser-control # 376480 <कॉलमडिफिनिशन ... मैक्सविड्थ = "10000" /> –

6

आकार अभिनय करने के लिए अपने चौड़ाई के बदलने का प्रयास करें। इससे स्प्लिटर केवल कॉलम का आकार बदल सकता है, जिसके बीच यह बैठता है, इसलिए यह सुनिश्चित न करें कि यह आपका वांछित व्यवहार है या नहीं। हालांकि, स्टार आकार के साथ, सामग्री खिड़की की सीमाओं से आगे नहीं बढ़ेगी।

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="2*" MinWidth="100" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" MinWidth="50" /> 
     <ColumnDefinition Width="2*" MinWidth="100" /> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="3*" MinWidth="150" /> 
    </Grid.ColumnDefinitions> 
    <GridSplitter 
     ResizeDirection="Columns" 
     Grid.Column="1" 
     Grid.RowSpan="8" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Stretch" 
     Width="2" 
     Margin="0,5,0,5" 
     Panel.ZIndex="1"/> 
    ... 
</Grid> 
+0

यह काफी काम नहीं करता है। –

+0

इसने मेरे लिए समस्या हल की। स्प्लिटर के दोनों तरफ के कॉलम स्टार आकार के होते थे। –

2

DragDelta घटना कैप्चरिंग यह ऐसा करने का एक और तरीका है:

private void VerticalGridSplitter_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    if (GridName.ColumnDefinitions[2].Width.Value < 400) 
    { 
     GridName.ColumnDefinitions[2].Width = new GridLength(400); 
    } 
} 

लेकिन * कॉलमडिफिनिशन पर मिनविड्थ का उपयोग करना ठीक काम करना चाहिए। ध्यान दें कि MinWidth के साथ ColumnDefinition शीर्ष स्तर पर होना चाहिए। यह काम नहीं करता है अगर यह कॉलम के अंदर कुछ ग्रिड में घोंसला है।

3

जब वहाँ splitters के बीच ऑटो चौड़ाई के साथ कोई स्तंभ हैं यह किसी भी अतिरिक्त कोड के बिना मेरे लिए काम करता, यानी .:

<Grid > 
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="20*" MinWidth="50" MaxWidth="500" /> 
    <ColumnDefinition Width="Auto"/> <!-- Remove such columns /--> 
    <ColumnDefinition Width="100*" MinWidth="850"/> 
    <ColumnDefinition Width="30*" MinWidth="50" MaxWidth="800" /> 
</Grid.ColumnDefinitions> 
... 
<GridSplitter HorizontalAlignment="Right" Width="3"/> 
... 
<GridSplitter Grid.Column="3" HorizontalAlignment="Left" Width="3" /> 
<!-- Assign Grid.Column to 2 if you remove the auto width column /--> 
... 
</Grid> 

अन्यथा ग्रिड आकार बदलने योग्य हो जाएगा।

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

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