2009-10-16 11 views
9

मैं आइटम नियंत्रण का उपयोग कर आइटम की एक महत्वपूर्ण सूची प्रदर्शित करना चाहता हूं।आइटम नियंत्रण, वर्चुअलाइजिंगस्टैकपैनल और स्क्रॉलव्यूयर ऊंचाई

कारण मैं आइटम्स कंट्रोल का उपयोग कर रहा हूं यह है कि डेटा टेम्पलेट उस एप्लिकेशन में अधिक जटिल है जिस पर मैं काम कर रहा हूं: नमूना कोड केवल मेरे आकार की समस्या को दर्शाता है।

मैं चाहूँगा:

  • ItemsControl वर्चुलाइज़ किए जाने की वजह से (ग्रिड) कई मदों
  • इसके आकार प्रदर्शित करने के लिए स्वचालित रूप से अपनी मूल कंटेनर के लिए विस्तार करने के लिए है वहाँ

    <Grid> 
        <ItemsControl x:Name="My" ItemsSource="{Binding Path=Names}"> 
         <ItemsControl.Template> 
          <ControlTemplate> 
           <StackPanel> 
            <StackPanel> 
             <TextBlock Text="this is a title" FontSize="15" /> 
             <TextBlock Text="This is a description" /> 
            </StackPanel> 
            <ScrollViewer CanContentScroll="True" Height="400px"> 
             <VirtualizingStackPanel IsItemsHost="True" /> 
            </ScrollViewer> 
           </StackPanel> 
          </ControlTemplate> 
         </ItemsControl.Template> 
         <ItemsControl.ItemTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding}" /> 
          </DataTemplate> 
         </ItemsControl.ItemTemplate> 
        </ItemsControl> 
    </Grid> 
    

कोड के पीछे है:

public partial class Page1: Page 
{ 
    public List<string> Names { get; set; } 
    public Page1() 
    { 
     InitializeComponent(); 

     Names = new List<string>(); 
     for(int i = 0; i < 10000; i++) 
      Names.Add("Name : " + i); 

     My.DataContext = this; 
    } 
} 

मैं 400px तक ScrollViewer ऊंचाई बल के रूप में, ItemsControl वर्चुअलाइजेशन काम करता है के रूप में मैं उम्मीद: ItemsControl, सूची प्रदर्शित करता है, भले ही यह है कि कितने आइटम शामिल हैं की बहुत जल्दी।

हालांकि, अगर मैं ऊंचाई = "400 पीएक्स" हटा देता हूं, तो सूची पूरी सूची को प्रदर्शित करने के लिए अपनी ऊंचाई का विस्तार करेगी, भले ही उसके मूल कंटेनर ऊंचाई हों। इससे भी बदतर: इसके कंटेनर के पीछे दिखाई देता है।

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

मैं अपने आइटम नियंत्रण के स्वचालित ऊंचाई विस्तार और वर्चुअलाइजेशन दोनों को कैसे प्राप्त कर सकता हूं?

उत्तर

8

समस्या आइटम नियंत्रण में है। टेम्पलेट: आप वहां स्टैकपैनल का उपयोग करते हैं, जो उनके बच्चों को उतनी ऊंचाई देता है जितना वे चाहते हैं। इसे

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <StackPanel> 
     <TextBlock Text="this is a title" FontSize="15" /> 
     <TextBlock Text="This is a description" /> 
    </StackPanel> 
    <ScrollViewer CanContentScroll="True" Grid.Row="1"> 
     <VirtualizingStackPanel /> 
    </ScrollViewer> 
</Grid> 

और इसे ठीक काम करना चाहिए।

उम्मीद है कि यह मदद करता है।

+0

+1, यह बिल्कुल अपेक्षित काम कर रहा है :) बहुत बहुत धन्यवाद! – Larry

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