2012-11-20 70 views
4

我有一個列表框,將其ItemsPanelTemplate實現爲WrapPanel。我需要計算導航行數獲取WrapPanel中的行數?

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Grid.IsSharedSizeScope="True" /> 
     </ItemsPanelTemplate> 
    <ListBox.ItemsPanel> 
<ListBox> 

有沒有什麼直接的方法?

+0

謝謝@KDiTraglia – Ammark

+0

爲什麼你需要計算行數?你試圖支持什麼特定的導航任務? – devuxer

+0

我想使用箭頭鍵導航列表框。目前,當我向上或向下按下時,選擇橫向移動而不是垂直移動。 @DanM – Ammark

回答

6

因爲WrapPanel是一個流量控制,所以您必須執行計算以確定有多少物體適合自己。

採取WrapPanelActualHeight屬性,除以你在面板被放置的對象的項目(或WrapPanelItemHeight屬性)的ActualHeight。這應該給你的行數:

int numRows = (int)(WrapPanel.ActualHeight/Item.ActualHeight); 

或:

int numRows = (int)(WrapPanel.ActualHeight/WrapPanel.ItemHeight); 

這種計算將被關閉,如果您有任何空白組,但你應該能夠考慮到這些。

(您可以使用ActualWidthItemWidth來獲得列數)。

+0

如何獲得該物品的ActualHeight ?. – Ammark

+0

@Ammark - 它應該有這個屬性 - 你沒有說過它是什麼。 – ChrisF

+0

ItemHeight可能比ActualHeight更好。 – devuxer