2011-07-07 25 views
5

के भीतर किसी आइटम नियंत्रण को एम्बेड करना स्क्रॉलव्यूयर से संबंधित कई प्रश्न हैं जिन पर मैंने शोध किया है, लेकिन उनमें से कोई भी मेरे लिए काम नहीं कर पाया है। यह लगभग निश्चित रूप से किसी तत्व के आकार के बारे में समझ की कमी के कारण आता है।स्क्रॉलव्यूयर

<DockPanel Width="Auto"> 
      <ScrollViewer DockPanel.Dock="Top" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" CanContentScroll="True" BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1" Background="{DynamicResource LightGradientBackgroundBrush}"> 
      <ItemsControl Focusable="false" Width="Auto" MinHeight="30" ItemsSource="{Binding RequiredFields}" OverridesDefaultStyle="False"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <DockPanel /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Grid Margin="3,0,3,3"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="110"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <Label Content="{Binding Path=Header, Mode=OneTime}" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="0"/> 
          <TextBox Text="{Binding Path=Value}" HorizontalAlignment="Stretch" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="1"/> 
         </Grid> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </ScrollViewer> 
     </DockPanel> 

यह नियंत्रण सामग्री के रूप में एक टैब के अंदर भरी हुई है: सबसे पहले, मेरी XAML (UserControl परिभाषा के अलावा अन्य, इस पूरे नियंत्रण है)। टैब को होस्ट करने वाली विंडो आकार बदलने योग्य है, और टैब सामग्री न्यूनतम आकार 60 है। मैं जो करने का प्रयास कर रहा हूं वह है स्क्रॉलव्यूवर टैब भरें, लेकिन विंडो की सीमाओं के पीछे टैब को धक्का न दें। उपर्युक्त एक्सएएमएल के साथ, टैब ऊंचाई विस्तार में अतिरिक्त सामग्री परिणाम, और विंडो पर दिखाई देने वाली स्क्रॉलबार, टैब नहीं।

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

मैं गलत कहां जा रहा हूं?

संपादित करें:

समस्या ऊंचाई, चौड़ाई नहीं है। चौड़ाई इस तरह व्यवहार कर रही है। मैंने रैपर को एक ग्रिड में सुझाए गए अनुसार बदल दिया है, लेकिन जब तक मैं ऊँचाई संपत्ति सेट नहीं करता, ग्रिड विस्तारित स्क्रोलव्यूवर की सामग्री को फिट करने के लिए फैलता है, जिससे पहले की तरह ही समस्या होती है।

अपडेट किया गया XAML: नीचे दिए गए उत्तर की

<Grid MinHeight="60" VerticalAlignment="Top"> 
     <Border BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1"> 
     <ScrollViewer 
      HorizontalScrollBarVisibility="Auto" 
      VerticalScrollBarVisibility="Visible" 
      CanContentScroll="True" 
      BorderBrush="{DynamicResource PanelBorder}" 
      BorderThickness="1,1,1,1" 
      Background="{DynamicResource LightGradientBackgroundBrush}" 
      > 
      <ItemsControl Focusable="false" Width="Auto" MinHeight="30" ItemsSource="{Binding RequiredFields}" OverridesDefaultStyle="False"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Vertical" /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Grid Margin="3,0,3,3"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="110"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <Label Content="{Binding Path=Header, Mode=OneTime}" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="0"/> 
          <TextBox Text="{Binding Path=Value}" HorizontalAlignment="Stretch" Foreground="{DynamicResource SilverBorderColorBrush}" Grid.Column="1"/> 
         </Grid> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
       <ItemsControl.ItemContainerStyle> 
        <Style> 
         <Setter Property="DockPanel.Dock" Value="Top"/> 
        </Style> 
       </ItemsControl.ItemContainerStyle> 
      </ItemsControl> 
     </ScrollViewer> 
     </Border> 
    </Grid> 

कोई भी इस काम करने के लिए मदद की है, लेकिन मैं काफी विश्वास है कि जवाब अधिकांश मामलों में काम करेगा हूँ।

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

यदि टैब पृष्ठ को उसकी सामग्री में फिट करने के लिए विस्तारित नहीं किया गया था, तो नीचे दिए गए समाधान काम करेंगे। दुर्भाग्यवश, मुझे इस मामले पर विश्वास नहीं है।

इस पर एक पूरा दिन बर्बाद हो गया। आगे बढ़ने का समय।

उत्तर

6

आह हाँ WPF लेआउट की पेचीदगियों को एक दर्द है "बच्चों को अपने वांछित आकार के होते हैं" कभी कभी। आपके आइटम नियंत्रण पर डॉकपैनल और चौड़ाई = "ऑटो" का संयोजन आप क्या कर रहे हैं। डॉकपैनल अपने बच्चों को बताता है कि वे लेआउट के लिए जितना चाहें उतना स्थान प्राप्त कर सकते हैं। आपके आइटम नियंत्रण तब अपने बच्चों को एक ही बात बताता है। अंत में, विंडो oversized सामग्री को संभालने के लिए एक स्क्रॉलव्यूयर बनाता है।

बाहरी डॉकपनेल को ग्रिड के साथ बदलें और सभी को अच्छी तरह से होना चाहिए।

+0

धन्यवाद @ माइक। यदि मैं रैपर के रूप में ग्रिड नियंत्रण का उपयोग करता हूं, और एक निश्चित ऊंचाई निर्धारित करता हूं, तो यह विज्ञापन के रूप में काम करता है। हालांकि, अगर खिड़की का विस्तार किया गया है, तो ऊपर/नीचे बहुत खाली जगह है। मैं ग्रिड को अपने माता-पिता के साथ विस्तार करना चाहता हूं, लेकिन अपने बच्चों को (लंबवत) रोकना चाहता हूं। तो, मैं एक निश्चित ऊंचाई निर्धारित नहीं करना चाहूंगा। यदि मैं नहीं करता, तो वही गलत व्यवहार होता है। –

+0

क्षमा करें, मुझे आपको कॉलम और पंक्ति परिभाषा बनाने और क्रमशः चौड़ाई और ऊंचाई सेट करने के लिए बताना था। वह जो आपको चाहिए वह प्राप्त करना चाहिए। –

+0

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

1

ताकत के लिए नहीं ScrollViewer करवाने के लिए, आप ग्रिड कंटेनर

<Grid>    
<ScrollViewer DockPanel.Dock="Top" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Visible" CanContentScroll="True" BorderBrush="{DynamicResource PanelBorder}" BorderThickness="1,1,1,1" Background="{DynamicResource LightGradientBackgroundBrush}"> 
... 
</ScrollViewer>   
</Grid> 

DockPanel और StackPanel उपयोग करने की आवश्यकता हमेशा यह बच्चों

इसके अलावा (मैं here से कॉपी किया गया) इस नोट को देखो है फिट करने के लिए खिंचाव

पैनल एक्स आयाम Y आयाम

कैनवास नहीं नहीं

डॉक हां हां

StackPanel (कार्यक्षेत्र) हां नहीं

StackPanel (क्षैतिज) नहीं हाँ

ग्रिड हाँ * हाँ *

WrapPanel नहीं नहीं

  • "ऑटो" पंक्तियों और कॉलम
  • का उपयोग करते समय छोड़कर

उपरोक्त तालिका में हाँ का मतलब है कि उपरोक्त तालिका में कोई

"बच्चों उपलब्ध आकार तक फैला रहे हैं" का अर्थ है