在xaml中的StackPanel方向

时间:2013-10-02 09:40:02

标签: silverlight xaml silverlight-4.0 stackpanel

我的xaml在stackPanel中遇到了一个奇怪的问题。

我的stackPanel包含一个文本框和一个按钮。

这应该在同一行(如果可能,取决于文本宽度)。 问题是:

如果stackPanel有Orientation="Vertical",则按钮将转到文本旁边的行。 如果stackPanel有Orientation="Horizontal",则该行不会执行任何断行,因此所有行都将离开我的网格。

<StackPanel Name="spRemplir"
            Grid.Row="2"
            Grid.ColumnSpan="6"
            Width="560"
            Margin="5,5,5,5"
            Orientation="Horizontal"
            VerticalAlignment="Center">
 <TextBlock FontWeight="Bold"
            Text={Binding Text}
            TextWrapping="Wrap"/>
 <Button Name="btRemplir"
         Margin="5,0,0,0"
         Width="150"
         Content="Remplir"/>
</StackPanel>

如何获得一个stackPanel,必要时会破坏行,并在同一行上有一个文本和一个按钮?

感谢Eli Arbel更新了Wrapanel:

 <toolkit:WrapPanel  Name="spRemplir"
                     Grid.Row="2"
                     Grid.ColumnSpan="6"
                     Margin="5,5,5,5"
                     Width="560"
                     Orientation="Horizontal">
   <TextBlock FontWeight="Bold"
              Text={Binding Text}
              TextWrapping="Wrap"/>
   <Button Name="btRemplir"
           Content="Remplir"/>
</toolkit:WrapPanel>

但是,按钮仍然在下一行,而在同一行上的文本后面有足够的空格。

尝试删除面板上的宽度,但是,没有更多的包装......

我不明白。即使在同一个网格上有stackPanel,它们也不应该干扰包裹面板吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

您可以尝试Silverlight Toolkit中的WrapPanel。请注意,此面板不允许您将项目拉伸到容器宽度。

您还应该考虑删除面板的固定Width

答案 1 :(得分:1)

尝试使用Grid而不是StackPanel。 StackPanel的问题在于它们不会报告它们不在房间的可视树。这不是一个错误,它只是它们的方式,并且在您需要时它是合适的。但我避开它们,除了最内层的元素。但是StackPanels中没有StackPanels,因为你会丢失TextWrapping / Scrolling,只是让元素落在页面的右边或底部。

其次,确保外部容器已设置为宽度为约束。例如,在布局根目录中,为其指定一个列,并将宽度设置为*表示=“可用空间,但不是更多”

一旦你的外容器受到限制,那么你的TextBlock将正确包装。

格雷格

答案 2 :(得分:0)

考虑使用WrapPanel代替堆栈面板:http://wpftutorial.net/WrapPanel.html