2011-05-18 14 views
5

दिखाने से WPF ListView या ListBox को रोकें, हमारे पास कुछ सूची दृश्य और सूची बॉक्स हैं जो ग्रिड के अंदर हैं जहां आप ग्रिड स्प्लिटर की सहायता से नियंत्रण की वास्तविक ऊंचाई बदल सकते हैं। ऐसा करने पर आप ListBox की ऊंचाई व्यवस्थित करने में सक्षम होते हैं, इसलिए आइटमों में से एक पूरी तरह से दिखाई नहीं दे रहा है क्योंकि ListView इसे प्रदर्शित करने के लिए छोटा हो जाता है।हमारे आवेदन में "आधा" आइटम

यह एक ऐसा व्यवहार है जिसे हम नहीं चाहते हैं।

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

हम किसी भी सुझाव के लिए खुले हैं।

+0

आप आंशिक वस्तुओं को प्रदर्शित करने से क्यों रोकना चाहते हैं? जब तक सूची स्क्रॉल करने योग्य हो, तब तक यह लोगों के लिए एक महान संकेतक है कि सामग्री स्क्रॉल कर सकती है। –

उत्तर

1

इस तरह से ListView को ठीक करने का कोई तरीका नहीं है। लिस्टबॉक्स के लिए, हालांकि, आप ArrangeOverride को ओवरराइड कर सकते हैं और आइटम को स्वयं व्यवस्थित कर सकते हैं। उन वस्तुओं को ढेर करें जिन्हें आप देखना चाहते हैं, और उन वस्तुओं को व्यवस्थित करें जिन्हें आप दिखाना नहीं चाहते हैं (उदा। आंशिक रूप से दृश्यमान आइटम) ताकि वे दिखाई न दें। उदाहरण के लिए, एक गैर आभासी संस्करण:

/// <summary> 
    /// Used to arrange all of the child items for the layout. 
    /// Determines position for each child. 
    /// </summary> 
    /// <param name="finalSize">Parent passes this size in</param> 
    /// <returns>Parent size (always uses all of the allowed area)</returns> 
    protected override Size ArrangeOverride(Size finalSize) 
    { 
     // Arrange in a stack 
     double curX = 0; 
     double curY = 0; 
     foreach (UIElement child in InternalChildren) 
     { 
      double nextY = curY + child.DesiredSize.Height; 
      if (nextY > finalSize.Height)   // Don't display partial items 
       child.Arrange(new Rect()); 
      else 
       child.Arrange(new Rect(curX, curY, child.DesiredSize.Width, child.DesiredSize.Height); 
      curY = nextY; 
     } 

     return finalSize; 
    } 
0

तुम बस सेल जो you'r आकार बदलने के लिए MinHeight या MinWidth सेट करना होगा। इसे आज़माएं:

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition MinHeight="50"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition MinHeight="50"/> 
     </Grid.RowDefinitions> 
     <ListBox HorizontalAlignment="Center" Margin="10"> 
      <ListBoxItem>First</ListBoxItem> 
      <ListBoxItem>Second</ListBoxItem> 
      <ListBoxItem>Third</ListBoxItem> 
      <ListBoxItem>Fourth</ListBoxItem> 
     </ListBox> 
     <GridSplitter Grid.Row="1" Height="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
     <ListView Grid.Row="2" Margin="4"> 
      <ListViewItem>First</ListViewItem> 
      <ListViewItem>Second</ListViewItem> 
      <ListViewItem>Third</ListViewItem> 
      <ListViewItem>Fourth</ListViewItem> 
     </ListView> 
    </Grid> 
संबंधित मुद्दे