2012-10-27 15 views
8

में भिन्न चौड़ाई के आइटम प्रदर्शित करने का कोई तरीका है, मैं विंडोज 8 टाइल्स की तरह कुछ कोशिश कर रहा हूं और विभिन्न चौड़ाई और/या ऊंचाई की टाइल प्रदर्शित करना चाहता हूं। WrapPanel छोटे कॉलम के चारों ओर खाली रिक्त स्थान छोड़कर प्रत्येक कॉलम बराबर चौड़ाई और ऊंचाई बनाता है। क्या StackPanel जैसी वस्तुओं को प्रदर्शित करने के लिए कोई तरीका या पैनल है जहां प्रत्येक आइटम में व्यक्तिगत आयाम हो सकते हैं और WrapPanel की तरह लपेट सकते हैं?क्या wpf wrappanel

संपादित करें: यह मेरा ItemsControl है। मैंने टाइल डेटा टेम्पलेट को एक साधारण Border और TextBlock के साथ बदल दिया। चौड़ाई auto है और टाइल्स ठीक दिखती है WrapPanel बराबर आकार वाली कोशिकाओं को बनाते हैं।

  <ItemsControl ItemsSource="{Binding Path=Contents}" HorizontalContentAlignment="Left"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <WrapPanel Orientation="Vertical" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Border Background="#B1DBFC" Height="200px" BorderBrush="#404648" Margin="5"> 
         <TextBlock VerticalAlignment="Center" Text="{Binding Path=Name}" /> 
        </Border> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

WrapPanel

आप छवि से देख सकते हैं कि प्रत्येक स्तंभ के width व्यापक आइटम की चौड़ाई है।

यदि मैं सीमा पर स्पष्ट रूप से चौड़ाई निर्धारित करता हूं, तो चीजें अधिक बदसूरत हो जाती हैं। Items with width set

+1

मुझे यकीन है कि आप 'लपेटें' में वस्तुओं की अलग-अलग ऊंचाई/चौड़ाई निर्धारित कर सकते हैं - देखें [यहां] (http://www.codeproject.com/Articles/30904/WPF-Layouts-A- एक उदाहरण के लिए विजुअल-क्विक-स्टार्ट)। क्या आप 'ItemControl' के अंदर 'WrapPanel' का उपयोग करने की तरह कुछ कर रहे हैं? यदि ऐसा है, तो आपको आइटम पर नहीं, 'ItemContainerStyle' में ऊंचाई/चौड़ाई सेट करने की आवश्यकता है (इस आलेख के नीचे देखें] (http://rachel53461.wordpress.com/2011/09/17/wpf- आइटम्स कंट्रोल-उदाहरण /) उदाहरण/स्पष्टीकरण के लिए) – Rachel

+0

पॉइंटर के लिए धन्यवाद, और हाँ मैं 'आइटम कंट्रोल 'के अंदर' लपेटें 'का उपयोग कर रहा हूं। मुझे लगता है कि कुछ और समस्या का कारण बन रहा है। –

+0

यदि 'ItemContainerStyle' में आपकी' ऊंचाई '/ 'चौड़ाई' रखना काम नहीं करता है, तो क्या आप अपना प्रश्न अपने एक्सएएमएल कोड से अपडेट कर सकते हैं? – Rachel

उत्तर

8

व्यवहार आप देख रहे हैं WrapPanel की डिफ़ॉल्ट व्यवहार के रूप में निम्न नमूना से देखा जा सकता है।

<WrapPanel > 
    <WrapPanel.Resources> 
     <Style TargetType="{x:Type Rectangle}"> 
      <Setter Property="Width" 
        Value="80" /> 
      <Setter Property="Height" 
        Value="80" /> 
      <Setter Property="Margin" 
        Value="3" /> 
      <Setter Property="Fill" 
        Value="#4DB4DD" /> 
     </Style> 
    </WrapPanel.Resources> 

    <Rectangle Width="150" /> 
    <Rectangle /> 
    <Rectangle /> 
    <Rectangle /> 
    <Rectangle Width="200"/> 
    <Rectangle /> 
    <Rectangle /> 
    <Rectangle /> 
    <Rectangle Width="220"/> 
    <Rectangle /> 
    <Rectangle /> 

</WrapPanel> 

निम्नलिखित में से कौन परिणाम पैदा करता है:

enter image description here

आप देख सकते हैं, प्रत्येक आइटम की चौड़ाई सम्मानित किया है।

आपकी समस्या WrapPanel से Vertical पर आपके टेम्पलेट में अभिविन्यास सेट करने के कारण होती है। यह बाएं से दाएं की बजाय वस्तुओं को ऊपर से नीचे तक रख रहा है जिसका अर्थ है कि यह Height संपत्ति है जिसे आपको सेटिंग करने की आवश्यकता है (या आप मेरे उदाहरण में क्षैतिज लेआउट पर वापस लौट सकते हैं)।

अपने आउटपुट की तुलना अपने स्क्रीनशॉट पर करें जहां पैनल क्षैतिज अभिविन्यास पर सेट है; प्रत्येक पंक्ति उच्चतम Rectangle का आकार है। मेरा विश्वास मत करो? Rectangle'sHeight संपत्ति को एक बड़े मूल्य पर सेट करने का प्रयास करें और आप देखेंगे कि पंक्ति का आकार बढ़ जाएगा और Rectangles अब लंबवत रेखाबद्ध नहीं होगा।

अपनी टिप्पणी पढ़ना मुझे लगता है कि सबसे अच्छा तरीका है आरंभ करने के लिए निम्न कार्य करने के लिए है:

  • एक WrapPanel कि क्षैतिज अपनी सामग्री बाहर देता है।
  • आइटमों में वर्दी Height होना चाहिए।
  • WrapPanel के को एक निश्चित आकार में रोकें ताकि आपको ऊर्ध्वाधर स्क्रॉलबार न मिले।

की ऊंचाई अपने WrapPanel निम्न सूत्र का उपयोग कर बाहर काम किया जाना चाहिए:

((मद की ऊंचाई + शीर्ष मार्जिन + निचला हाशिया) x पंक्तियों की संख्या))

प्रत्येक आइटम की चौड़ाई को थोड़ा सा विचार भी चाहिए ताकि पैनल मेट्रो इंटरफ़ेस (क्षैतिज की बजाय पंक्तिबद्ध) की तरह आइटम को क्षैतिज रूप से बाहर रखे।

दो टाइल आकार हैं; छोटा एक 80px चौड़ा है और बड़ा 166 पीएक्स चौड़ा है। बड़े टाइल की चौड़ाई इस तरह बाहर काम किया है:

(आइटम चौड़ाई * 2) + (बाएं मार्जिन + सही मार्जिन)

यह सुनिश्चित करता है टाइल्स सही ढंग से लाइन अप।

<ScrollViewer HorizontalScrollBarVisibility="Auto" 
       VerticalScrollBarVisibility="Disabled"> 
    <StackPanel Orientation="Horizontal" 
       Margin="10,0"> 
     <StackPanel.Resources> 
      <Style TargetType="{x:Type Rectangle}"> 
       <Setter Property="Width" 
         Value="80" /> 
       <Setter Property="Height" 
         Value="80" /> 
       <Setter Property="Margin" 
         Value="3" /> 
       <Setter Property="Fill" 
         Value="#4DB4DD" /> 
      </Style> 
      <Style TargetType="{x:Type WrapPanel}"> 
       <Setter Property="Margin" 
         Value="0,0,25,0" /> 
       <Setter Property="MaxWidth" 
         Value="516" /> 
      </Style> 
     </StackPanel.Resources> 
     <WrapPanel Height="258"> 
      <Rectangle Width="166" /> 
      <Rectangle /> 
      <Rectangle Width="166" /> 
      <Rectangle /> 
      <Rectangle Width="166" /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle Width="166" /> 
      <Rectangle /> 
     </WrapPanel> 
     <WrapPanel Height="258"> 
      <Rectangle /> 
      <Rectangle Width="166" /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle /> 
      <Rectangle Width="166" /> 
      <Rectangle /> 
     </WrapPanel> 
    </StackPanel> 
</ScrollViewer> 

निम्नलिखित में से कौन परिणाम पैदा करता है:

enter image description here

यह आपको एक में फिर से कारक को यह शुरू करने के लिए पर्याप्त जानकारी देना चाहिए

तो अब मेरी XAML कुछ इस तरह दिखता पूर्ण नियंत्रण। यदि आप ऐसा करते हैं तो रख निम्न बातों का ध्यान:

  • लेआउट गुणों (छोटे आइटम आकार, बड़े आइटम आकार, अंतराल आदि) नहीं बल्कि मुश्किल से गणना की जानी चाहिए कोडित ताकि आप उदाहरण के लिए, को बदलना चाहते हैं, मार्जिन, लेआउट अभी भी सही तरीके से काम करेगा (आईई टाइल्स अभी भी लाइन अप होगा)।
  • मैं प्रदर्शित किए जा सकने वाले 'टाइल्स' की संख्या को सीमित कर दूंगा (वर्तमान उदाहरण में, यदि टाइल्स लेआउट में फिट नहीं होते हैं तो वे आसानी से छुपाए जाते हैं जो शायद आप नहीं चाहते हैं)।
+0

उत्तर के लिए धन्यवाद। लेकिन मेरे मामले में, मैं विंडोज 8 टाइल्स के समान वर्टिकल स्क्रॉलिंग से बचने की कोशिश कर रहा हूं। 'व्रपपनेल' के साथ इसे प्राप्त करने में कोई मार्गदर्शन? –

+0

मैं लेआउट कंटेनर की चौड़ाई और ऊंचाई को सीमित कर दूंगा और यह सुनिश्चित करने के लिए कि कोई स्क्रॉलिंग नहीं होगी (मैं क्षैतिज और ऊर्ध्वाधर अभिविन्यास दोनों के लिए ऐसा करूंगा) –

+0

ठीक है, तो कोई नहीं है विभिन्न आकारों के आइटम प्रदर्शित करते समय केवल क्षैतिज स्क्रॉलिंग प्रदान करने का आसान तरीका? किसी भी अन्य तरीके से मुझे जानने का कोई मौका मैं इस प्रभाव को प्राप्त कर सकता हूं? –