2011-12-15 101 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中以便它们始终适合。 (也包裹)