2011-11-27 15 views
7

मैं डेटाग्रिड या लिस्ट व्यू का उपयोग नहीं कर रहा हूं और प्रत्येक सेल कॉलम के लिए आइटम्स के रैप पैनल वाले कक्ष बनाने के लिए स्क्रॉलव्यूयर और ग्रिड का उपयोग कर रहा हूं।ग्रिड/स्क्रॉलव्यूज़र- फ्रीज ग्रिड हेडर पंक्ति वर्टिकल स्क्रॉलिंग, लेकिन क्षैतिज स्क्रॉलिंग

मुझे डेटाग्रिड के हेडर कॉलम के समान व्यवहार के साथ कुछ पसंद है या इसे नीचे दिए गए आइटमों के माध्यम से लंबवत स्क्रॉल करते समय इसे जमे हुए रखने के लिए सूचीदृश्य चाहिए, लेकिन इसे क्षैतिज स्क्रॉल करें।

मेरे पास वर्तमान में मेरी मुख्य विंडो की जड़ के रूप में निम्नलिखित है जो कि वर्टिकल स्क्रॉलबार को प्रदर्शित करता है, जब वस्तुओं का संरेखण प्रदर्शित होता है।

नोट्स:

  • हैडर कॉलम गतिशील "mainGrid" के पीछे कोड में जोड़ रहे हैं तो नीचे दिए गए प्रत्येक स्तंभ के लिए एक "1 *" आकार, और साथ "स्थिर" क्षैतिज होने से कर रहे हैं स्क्रॉलबार की अनुमति है लेकिन लंबवत स्क्रॉलबार अक्षम है।
  • फिर एक आंतरिक स्क्रॉलव्यूवर जोड़ा जाता है जो क्षैतिज स्क्रॉलिंग अक्षम करता है, लेकिन आंतरिक "पंक्ति समूह" की लंबवत स्क्रॉलिंग की अनुमति देता है।
  • आइटम नियंत्रण के लिए आइटम टेम्पलेट कॉलम में प्रत्येक "पंक्ति समूह" के लिए ग्रिड बनाता है।

तो जब "innerScrollViewer" प्रदर्शित करता है यह खड़ी स्क्रॉलबार आइटम अब और बाहरी कॉलम हेडर के साथ गठबंधन नहीं कर रहे हैं और आइटम सही खड़ी स्क्रॉलबार की वजह से छोड़ दिया करने के लिए स्थानांतरित कर दिया जाता है। जब मैं एक लंबवत स्क्रॉलबार प्रदर्शित होता है या नहीं, तो दो परिदृश्यों के लिए बाहरी स्तंभ शीर्षकों के साथ गतिशील रूप से चीजों को लाइन करने के लिए मैं इसे कैसे प्राप्त करूं?

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> 
     <Grid x:Name="mainGrid" 
       Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ScrollViewer}}, Path=ViewportWidth}"> 
    <RowDefinitions> 
     <RowDefinition Height="Auto" />  <!-- Contains Header columns dynamically added to be "frozen" --> 
     <RowDefinition Height="*" />  <!-- "row groupings" --> 
    </RowDefinitions> 

      <ScrollViewer x:Name="innerScrollViewer" 
          HorizontalScrollBarVisibility="Disabled" 
          VerticalScrollBarVisibility="Auto"       
          Grid.Row="1" 
          Grid.ColumnSpan="{Binding Path=NumColumns}"> 

     <ItemsControl Name="mainWorkItemsItemsControl" 
        Width="{Binding ActualWidth, ElementName=mainGrid}" 
            ItemsSource="{Binding MyGroups}" 
            ItemTemplate="{StaticResource groupedTemplate}" />      

      </ScrollViewer> 
    </Grid> 
</ScrollViewer> 


<DataTemplate x:Key="groupedTemplate"> 

    <ItemsControl ItemsSource="{Binding GroupItems}"> 

        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
          <!-- Creates a grid with one row and the same number of columns as "mainGrid" above with a star sizing for each column --> 
          <SimpleGrid Rows="Auto" 
             Columns="{p:PyBinding CommaDelimit($[.NumColumns]\, \'*\')}" /> 
         </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel> 

        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
       <ItemsControl ItemsSource="{Binding Path=GroupedColumnItems}">          
            <ItemsControl.ItemTemplate> 
             <DataTemplate> 
         <MyControl />            
             </DataTemplate> 
            </ItemsControl.ItemTemplate> 
           </ItemsControl> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 

        <ItemsControl.ItemContainerStyle> 
         <Style> 
          <Setter Property="Grid.Column" 
            Value="{Binding Path=Index}" /> 
         </Style> 
        </ItemsControl.ItemContainerStyle> 

    </ItemsControl> 

</DataTemplate> 

उत्तर

1

आपके पास तीन विकल्प हैं।

  1. ऊर्ध्वाधर स्क्रॉल पट्टी दोनों स्क्रॉल दर्शकों इसलिए जब भीतरी स्क्रॉल दर्शक लंबवत स्क्रॉल की आवश्यकता है, ऊर्ध्वाधर स्क्रॉल पट्टी बस किसी भी अधिक स्थान लेने के बिना सक्षम हो (शीर्षक और आंतरिक के लिए) के लिए रूप से प्रदर्शित करें।

  2. पंक्तियों में ग्रिड में संबंधित कॉलम के साथ शीर्षलेख में प्रत्येक कॉलम की बाइंड चौड़ाई संपत्ति। इसलिए जब पंक्ति ग्रिड के कॉलम की चौड़ाई बदल जाती है तो यह हेडर के संबंधित कॉलम की चौड़ाई भी बदल जाएगी। यह आपको अपनी सीमाओं को खींचकर उपयोगकर्ता को फिर से आकार देने के लिए सुविधा देने में सुविधा प्रदान करेगा। लेकिन इसे और कोड की आवश्यकता होगी।

  3. आंतरिक स्क्रॉल व्यूअर के लंबवत पट्टी को दृश्यमान बनाएं और शीर्षलेख पर दाएं मार्जिन सेट करें जो लंबवत स्क्रॉल बार की चौड़ाई के बराबर है।

+0

महान सुझावों के लिए धन्यवाद @ makwana.a - मैं पसंद # 1 के समान कुछ के साथ गया जहां स्क्रॉलबार स्क्रॉलबार दिखाई देता है और सामग्री क्षेत्र पर ओवरलेड होने पर लेआउट को पुन: व्यवस्थित नहीं किया जाता है: http://www.eggheadcafe.com/tutorials/xaml/f51ddf8c-5227-4f1b-a5df-ec3d1b3439ca/styling-the-wpf-scrollviewer.aspx – soundslike

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