如何动态设置ListView列的数量

时间:2011-12-15 11:09:17

标签: wpf listview

我有一个包含两个usercontrols的窗口,一个带有listview的usercontrol和一个带有其他控件的usercontrol。

这样的事情:

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

问题:在低分辨率的屏幕上,只能看到3列中的2列,您需要滚动才能看到第三列。我想通过动态设置是否显示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>

关于如何解决这个问题的任何想法?

也许列表视图是一个糟糕的选择?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用WrapPanel作为ItemsPanel

<ItemsPanelTemplate>
  <WrapPanel />
</ItemsPanelTemplate>

请注意,没有本机虚拟化WrapPanel,因此对于大量项目而言,这不会很好。

答案 1 :(得分:0)

因为你的名字很长,你可以: 1-使用具有文本包装和最大/最小高度的文本框。 2-减少名称的字体大小。 3-将名称放在ViewBox中,以便它们始终适合。 (也包装)