Silverlight:如何在资源的控件中设置控件的样式?

时间:2011-03-02 15:38:10

标签: c# silverlight xaml

例如,下面是一些用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。

1 个答案:

答案 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>