2010-11-15 27 views
7

मुझे कई सूची दृश्य नियंत्रणों वाला एक ऐप मिला है जहां सूची की सूची में आइटम पूरी तरह से दिखाना आवश्यक है। सूची में आंशिक ListViewItem का प्रदर्शन कभी नहीं होना चाहिए। यदि उपयोगकर्ता स्क्रॉल व्यूअर को ऐसी स्थिति में रिलीज़ करता है जो आंशिक आइटम दिखाता है, तो सूची को "स्नैप" करना चाहिए और स्वयं को सही करना चाहिए ताकि केवल पूर्ण आइटम प्रदर्शित हो जाएं।WPF ListView हमेशा पूर्ण आइटम दिखाएं

किसी को भी इस से पहले किया गया है? मुझे लगता है कि ऐसा करने के लिए मुझे ListView और/या ScrollViewer को अधिभारित करने की आवश्यकता होगी। मैं इस दृष्टिकोण के बारे में सुझावों की तलाश में हूं। धन्यवाद।

<ctrls:SnapList x:Name="PART_ProductList" 
              ScrollViewer.CanContentScroll="False" 
              ScrollViewer.VerticalScrollBarVisibility="Auto" 
              ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
              ItemContainerStyle="{StaticResource ProductFinderItem}" 
              Canvas.Top="373" Canvas.Left="75" 
              Height="910" Width="900" > 

          <ctrls:SnapList.ItemsPanel> 
            <ItemsPanelTemplate> 
             <VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Standard" /> 
           </ItemsPanelTemplate> 
          </ctrls:SnapList.ItemsPanel> 

          <ctrls:SnapList.Template> 
            <ControlTemplate> 
            <ScrollViewer x:Name="Scroller" VerticalAlignment="Top" CanContentScroll="True" Style="{StaticResource VertScrollViewer}" Focusable="false" > 
               <ItemsPresenter /> 
              </ScrollViewer> 
            </ControlTemplate> 
          </ctrls:SnapList.Template> 
         </ctrls:SnapList> 
+0

आप किस स्क्रॉलव्यूयर के बारे में बात कर रहे हैं? क्या आपके पास एक ग्रिड (या कुछ) में स्क्रॉलव्यूयर है जिसमें कई ListViews हैं और जब वह स्क्रॉलव्यूयर स्थिति बदलता है तो आप यह सुनिश्चित करना चाहते हैं कि सभी ListViewItems दिखाई दे रहे हैं? एक सूची दृश्य के लिए, मैं आंशिक वस्तुओं को प्रदर्शित करने के लिए भी इसे प्राप्त नहीं कर सकता। –

+0

मैं सूची के नियंत्रण टेम्पलेट में स्क्रॉलव्यूयर के बारे में बात कर रहा हूं। मैंने अपनी पोस्ट में सूचियों में से एक के लिए xaml जोड़ा। मैं जिस स्क्रॉलव्यूयर के बारे में बात कर रहा हूं वह x: नाम = "स्क्रॉलर" उदाहरण एक्सएएमएल में है। –

+0

* लिस्टबॉक्स * डिफ़ॉल्ट रूप से एक ही व्यवहार है। क्या आप * ListView * के बजाय * ListBox * का उपयोग कर सकते हैं? – decyclone

उत्तर

0

आप ListView.ScrollIntoView की कोशिश की है:

यहाँ मेरी सूचियों में से एक है?

+0

ScrollIntoView किसी आइटम को देखने के लिए स्क्रॉल करेगा, लेकिन यह सुनिश्चित करने के लिए कुछ भी नहीं करता है कि केवल संपूर्ण आइटम सूची में दिखाई दे। यहां तक ​​कि अगर ऐसा होता है, तो मुझे अभी भी यह जानना होगा कि इसे कब कॉल करना है (उदाहरण के लिए। जब ​​आंशिक आइटम दिखाए जा रहे हैं)। –

+0

आपका वर्तमान प्रश्न अधिक स्पष्ट है। पहले यह ऐसा था कि आप चाहते थे कि आपका चयन पूरी तरह से दिखाई दे। इसके बजाए, आप नहीं चाहते कि आपकी सूची में कोई भी आंशिक आइटम दिख रहा हो। सही? – Yogesh

+0

दाएं। मेरा सवाल वही है जैसा मैंने मूल रूप से पोस्ट किया था। :) –

0

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

ScrollInfo to get the current scroll offset and info.

Scroll to vertical offset

1

मेरा मानना ​​है कि आप देख रहे हैं ScrollViewer.CanContentScroll संपत्ति

आप ListView में आइटम का अधिकतम आकार पता है, यह सुनिश्चित करें कि ListView की ऊंचाई एक ही है आकार, या आइटम ऊंचाई के एक बहु।

कार्य उदाहरण:

<ListView ScrollViewer.CanContentScroll="True" 
      Height="200"> 

    <ListBoxItem Height="50" 
        Content="Test1" /> 
    <ListBoxItem Height="50" 
        Content="Test2" /> 
    <ListBoxItem Height="50" 
        Content="Test3" /> 
    <ListBoxItem Height="50" 
        Content="Test4" /> 
    <ListBoxItem Height="50" 
        Content="Test5" /> 
    <ListBoxItem Height="50" 
        Content="Test6" /> 
    <ListBoxItem Height="50" 
        Content="Test7" /> 
    <ListBoxItem Height="50" 
        Content="Test8" /> 
    <ListBoxItem Height="50" 
        Content="Test9" /> 
    <ListBoxItem Height="50" 
        Content="Test10" /> 

</ListView> 

एक ScrollViewer में सामग्री भौतिक इकाइयों या तार्किक इकाइयों के संदर्भ में स्क्रॉल किया जा सकता है। भौतिक इकाइयां डिवाइस स्वतंत्र पिक्सेल हैं। तार्किक इकाइयों का उपयोग आइटम नियंत्रण में आइटम स्क्रॉल करने के लिए किया जाता है। स्क्रॉल व्यूअर का डिफ़ॉल्ट व्यवहार भौतिक इकाइयों का उपयोग पर अपनी सामग्री को स्क्रॉल करना है। हालांकि, ऐसे मामलों में जहां CanContentScroll सत्य पर सेट है, सामग्री स्क्रॉल करने के लिए लॉजिकल इकाइयों का उपयोग कर सकती है। उदाहरण के लिए, सूची बॉक्स, सूची दृश्य, और अन्य नियंत्रण जो से प्राप्त होते हैं आइटम्स नियंत्रण स्क्रॉल करने के लिए लॉजिकल इकाइयों का उपयोग करते हैं। यदि CanContentScroll सत्य है, ExtentHeight, ScrollableHeight, ViewportHeight, और के मान वर्टिकल ऑफसेट गुण भौतिक इकाइयों की बजाय आइटम की संख्या हैं।

आप के बजाय शारीरिक स्क्रॉल तार्किक स्क्रॉल की आवश्यकता है, एक ScrollViewer में मेजबान पैनल तत्व लपेट और गलत पर अपने CanContentScroll गुण सेट। अधिकांश पैनल तत्वों के लिए भौतिक स्क्रॉलिंग डिफ़ॉल्ट स्क्रॉल व्यवहार है।

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