例如,下面是一些用2个列表框填充列表框的代码:
<ListBox x:Name="LayoutRoot" Width="200" Height="400" Style="{StaticResource ListStyle}" >
<ListBoxItem>
<ListBox>
<ListBoxItem>11</ListBoxItem>
<ListBoxItem>12</ListBoxItem>
</ListBox>
</ListBoxItem>
<ListBoxItem>
<ListBox>
<ListBoxItem>21</ListBoxItem>
<ListBoxItem>22</ListBoxItem>
</ListBox>
</ListBoxItem>
</ListBox>
内部列表框似乎都在垂直列表中显示其内容。现在,我知道如何让一个列表框水平显示其内容,我知道如何通过在资源中设置样式来实现。我无法弄清楚的是如何在一个资源中设置它,我可以只应用一次到外部列表框,而不是每次我添加另一个内部列表框(即将它应用于每个内部列表框)。
这是我无数次失败的尝试:
<UserControl.Resources>
<Style x:Key="ListStyle" TargetType="ListBox">
<Setter Property="Template">
<Setter.Value>
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
如果我没有说清楚,我想在列表框中看到的是第一行中并排的11,12和第二行中并排的21,22。
答案 0 :(得分:0)
如果您使用的是Silverlight 4,则可以创建隐式样式。您可以通过在样式声明中不包含键来完成此操作。这将隐式将样式应用于该资源范围内的所有控件。然后,您还需要将Root ListBox的ItemsPanel显式设置为垂直布局。
<ListBox x:Name="LayoutRoot" Width="200" Height="400">
<ListBox.Resources>
<Style TargetType="ListBox">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<toolkit:WrapPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.Resources>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBoxItem>
<ListBox>
<ListBoxItem>11</ListBoxItem>
<ListBoxItem>12</ListBoxItem>
</ListBox>
</ListBoxItem>
<ListBoxItem>
<ListBox>
<ListBoxItem>21</ListBoxItem>
<ListBoxItem>22</ListBoxItem>
</ListBox>
</ListBoxItem>
</ListBox>