为什么扩展器只能容纳一个内容?

时间:2012-06-12 17:02:43

标签: wpf xaml

我正在尝试向扩展器添加一些内容,但它会抛出以下错误

<Expander Name="myExpander" Background="Tan"
              HorizontalAlignment="Left" Header="my expander"
              ExpandDirection="Down" IsEnabled="True" Width="100" IsExpanded="True">
        <Rectangle Width="10" Height="10" Fill="Red"/>
        <Rectangle Width="10" Height="10" Fill="blue"/>
</Expander>

对象'Expander'已经有一个子节点,无法添加'Rectangle'。 'Expander'只能接受一个孩子。

我以为我可以使用Expander作为容纳少量元素的容器,但它似乎只能保留一个!任何解决方法?

谢谢。 阿米特

3 个答案:

答案 0 :(得分:2)

许多元素都是这种情况。您可以嵌套一个面板,例如Grid或StackPanel,以便布局多个子节点。

示例:

<Expander Name="myExpander" Background="Tan"
              HorizontalAlignment="Left" Header="my expander"
              ExpandDirection="Down" IsEnabled="True" Width="100" IsExpanded="True">
        <StackPanel>
            <Rectangle Width="10" Height="10" Fill="Red"/>
            <Rectangle Width="10" Height="10" Fill="blue"/>
        </StackPanel>
</Expander>

这为您提供了如何布局孩子的无限灵活性。

答案 1 :(得分:2)

Expander是一个ContentControl,这意味着它包含一个内容。大多数容器都是这样的。

处理此问题的方法是将矩形放在自己的面板中,例如网格,并使Grid扩展器的内容。

<Expander Name="myExpander" Background="Tan"
          HorizontalAlignment="Left" Header="my expander"
          ExpandDirection="Down" IsEnabled="True" Width="100" IsExpanded="True">
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
      </Grid.ColumnDefinitions>
        <Rectangle Width="10" Height="10" Fill="Red"/>
        <Rectangle Grid.Column="1" Width="10" Height="10" Fill="blue"/>
    </Grid>
</Expander>

您可以使用此处所需的任何布局机制,例如CanvasGridStackPanelWrapPanel等。

答案 2 :(得分:1)

小心地将扩展器嵌套在已有网格的窗口中 记得使用Header =&#34; texthere&#34;而不是Content = 因为扩展器内容将与网格内容冲突