2011-12-15 23 views
0

我得到了一個包含兩個用戶控件的窗口,一個帶有listview的usercontrol和一個帶有其他控件的用戶控件。如何動態設置ListView列的數量

事情是這樣的:

+-------------------------------------------------+ 
| header stuff         | 
+---------------------------+---------------------+ 
| usercontrol with listview | another usercontrol | 
+-------------------------------------------------+ 
| footer stuff         | 
+-------------------------------------------------+ 

問題:在低分辨率的屏幕其只可能看到周圍的3列的2,你需要滾動看到THRID列。我想通過動態設置根據寬度顯示1,2列還是3列來避免水平滾動。另一個問題是名稱可能很長,因此listview中的項目寬度都與最長的名稱寬度相同。

代碼列表視圖:

<ListView Name="lstContacts" 
ItemsSource="{Binding Path=Contacts}" 
IsSynchronizedWithCurrentItem="True" 
ItemContainerStyle="{StaticResource RoundedItem}" 
SelectionMode="Single" 
HorizontalContentAlignment="Center"  
VerticalAlignment="Top" 
HorizontalAlignment="Stretch" > 
<ListView.ItemTemplate> 
    <DataTemplate> 
      <StackPanel Orientation="Vertical" Margin="3"> 
       <TextBlock FontWeight="Bold" FontSize="20" Text="{Binding  Path=Identifier}" HorizontalAlignment="Center" /> 
       <TextBlock FontSize="16" Text="{Binding Path=Name}"  HorizontalAlignment="Center" /> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="3" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
</ListView> 

如何排序了這一點任何想法?

也許listview是一個不好的選擇?

謝謝。

回答

0

你可以使用一個WrapPanel作爲ItemsPanel

<ItemsPanelTemplate> 
    <WrapPanel /> 
</ItemsPanelTemplate> 

注意,沒有提供原生的虛擬化WrapPanel,所以這不是一個大集合項目的良好表現。

0

因爲您的名字可以很長,您可以: 1-使用具有textwrapping和最大/最小高度的文本框。 2-減少名稱的字體大小。 3-將名稱放在ViewBox中以便它們始終適合。 (也包裹)