2011-05-12 16 views
5

में दृश्यमान पंक्तियों की संख्या की गणना करें मैं जानना चाहता हूं कि वास्तव में एक WPF DataGrid द्वारा कितनी पंक्तियां प्रदर्शित की जाती हैं।डेटाग्रिड

मैं DataGridRow से अधिक पाशन और IsVisible जाँच की कोशिश की, लेकिन ऐसा लगता है कि रिपोर्ट पंक्तियां IsVisible = true तब भी जब वे DataGrid व्यूपोर्ट में नहीं हैं।

मैं दृश्यमान पंक्तियों की संख्या को सही तरीके से कैसे गिन सकता हूं?

उत्तर

1

मैं MSDN मंच पर इस सवाल यह भी पूछा और मिल गया है एक good answer:

private bool IsUserVisible(FrameworkElement element, FrameworkElement container) { 
    if (!element.IsVisible) 
     return false; 
    Rect bounds = element.TransformToAncestor(container).TransformBounds(new Rect(0.0, 0.0, element.ActualWidth, element.ActualHeight)); 
    Rect rect = new Rect(0.0, 0.0, container.ActualWidth, container.ActualHeight); 
    return rect.Contains(bounds.TopLeft) || rect.Contains(bounds.BottomRight); 
} 
0

मन के लिए आते हैं एक सरल हैक,

सभी पंक्तियों पर पाश और देखें कि क्या आइटम एक कंटेनर है?

dataGrid.GetContainerFromItem(dataGrid.Items[row]); 

आशा है कि यह मदद करता है

+1

यह काम नहीं करता है। असल में, मेरे लूप में मैं 'ItemContainerGenerator.ContainerFromIndex' का उपयोग कर रहा था और कुछ आइटम जो प्रदर्शित नहीं होते हैं अभी भी कंटेनर हैं। –

1

मैं पंक्तियों Visible = true के रूप में दिखा तब भी जब वे नहीं थे के साथ एक ही समस्या थी 'टी।

समाधान के साथ आने का प्रयास करते हुए, मैंने यह प्रश्न पोस्ट किया: Visible rows in DataGrid is off by 1 (counted using ContainerFromItem)

यहाँ क्या मेरे लिए काम किया है:

uint VisibleRows = 0; 
var TicketGrid = (DataGrid) MyWindow.FindName("TicketGrid"); 

foreach(var Item in TicketGrid.Items) { 
    var Row = (DataGridRow) TicketGrid.ItemContainerGenerator.ContainerFromItem(Item); 

    if(Row != null) { 
     if(Row.TransformToVisual(TicketGrid).Transform(new Point(0, 0)).Y + Row.ActualHeight >= TicketGrid.ActualHeight) { 
      break; 
     } 

     VisibleRows++; 
    } 
} 

अतिरिक्त निर्देशों के लिए, वहाँ मेरा उत्तर में कुछ /* comments */ जुड़ा हुआ सवाल पर है, साथ ही सवाल ही है कि इसका जवाब करने के लिए नेतृत्व पर उपयोगकर्ता टिप्पणियों का एक धागा हैं ।