【发布时间】:2013-12-17 00:32:18
【问题描述】:
我正在尝试通过 RectangleBox 显示 Listview 项目(我使用 ControlTemplate 设法做到了)
我的问题是 RectangleBox 在窗口上的组织方式。 我想在一行上显示尽可能多的内容(取决于窗口的宽度),当一行被填满时,开始新的一行,依此类推。 每次调整大小后,都会根据窗口的宽度更新组织:
这可能会更好地了解我想要什么,您会看到窗口上的每个 RectangleBox (Labeled 1,2...) 组织根据其宽度而变化。
这是我在 MainWindow xaml 中的当前代码:
<ListView Name="PlayerList" ItemsSource="{Binding Players}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
应用了以下样式:
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<GroupBox Header="{Binding Name}" Width="250" Height="125" Name="Disp" HorizontalAlignment="Left">
<GroupBox.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="5,0,0,0" TextAlignment="Right"></TextBlock>
</StackPanel>
</DataTemplate>
</GroupBox.HeaderTemplate>
<StackPanel Orientation="Vertical">
<TextBlock Text="{Binding Char}"/>
<TextBlock Text="{Binding Item}"/>
</StackPanel>
</GroupBox>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但到目前为止,UniformGrid 只是一次失败的尝试,我一直在环顾四周,但无法真正找到解决方案。希望只是我很笨,遗漏了一些明显的东西 D:
感谢您的帮助。
【问题讨论】:
-
我不太了解 ListViewItems 的 ControlTemplate。您能否提供一些数据项类型的详细信息以及应如何可视化?否则 UniformGrid 似乎是正确的方法,它应该按照您使用它的方式工作。
-
WrapPanel可以工作吗? -
@Clemens UniformGrid 有一些不符合我想要的布局规范,通过根据它们的数量等来不同地间隔项目。对于 ControlTemplate,不确定你想看到什么,我只是在实现 RectangleBox 时重载了样式(我这样做是为了消除高亮效果)
-
@Chris 谢谢,就是这样=p
标签: wpf listview layout listviewitem