Silverlight xaml中的StackPanel方向

Silverlight xaml中的StackPanel方向,silverlight,xaml,silverlight-4.0,stackpanel,Silverlight,Xaml,Silverlight 4.0,Stackpanel,我的xaml在stackPanel中遇到了一个奇怪的问题 我的stackPanel包含一个文本框和一个按钮 这应该在同一行上(如果可能,取决于文本宽度)。 问题是: 如果stackPanel具有Orientation=“Vertical”,则按钮将转到文本下方的行。 如果stackPanel具有Orientation=“Horizontal”,则该行不会执行任何换行操作,因此所有的行都将脱离我的网格 <StackPanel Name="spRemplir" Grid

我的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,它们也不应该干扰包裹面板,对吗


谢谢。

考虑使用WrapPanel代替堆栈面板:

考虑使用WrapPanel代替堆栈面板:

您可以从。注意:此面板不允许将项目拉伸到容器宽度


您还应该考虑删除面板的固定宽度。

您可以尝试从面板上安装一个
WrapPanel
。注意:此面板不允许将项目拉伸到容器宽度


您还应该考虑删除面板的固定宽度。

尝试使用网格而不是堆叠面板。StackPanel的问题在于,它们不会向可视树报告它们不在房间内。这不是一个bug,这只是它们的方式,当你需要它时,它是合适的。但除了最里面的元素外,我避免使用它们。但不要在StackPanels中使用StackPanels,因为这样会丢失文本包装/滚动,只会让元素落在页面的右侧或底部

第二,确保设置了外部容器,以限制宽度。例如,在布局根目录中,为其指定一列,并设置*的宽度,这意味着=“可用空间,但不超过”

约束外部容器后,TextBlock将正确包装


Greg

尝试使用网格而不是StackPanel。StackPanel的问题在于,它们不会向可视树报告它们不在房间内。这不是一个bug,这只是它们的方式,当你需要它时,它是合适的。但除了最里面的元素外,我避免使用它们。但不要在StackPanels中使用StackPanels,因为这样会丢失文本包装/滚动,只会让元素落在页面的右侧或底部

第二,确保设置了外部容器,以限制宽度。例如,在布局根目录中,为其指定一列,并设置*的宽度,这意味着=“可用空间,但不超过”

约束外部容器后,TextBlock将正确包装



格雷格

WPF?银灯?Windows Phone?Windows8?更新您的标签。问题可能是硬编码宽度od StackPanel(width=“560”)。如果它在网格中,则不必这样做,可能会导致您所描述的结果。@EliArbel您的权利。添加silverlight标签。如果我去掉了宽度,我就不会换行了。WPF?银灯?Windows Phone?Windows8?更新您的标签。问题可能是硬编码宽度od StackPanel(width=“560”)。如果它在网格中,则不必这样做,可能会导致您所描述的结果。@EliArbel您的权利。添加silverlight标签。布里:如果我去掉了宽度,我就不会换行了。很抱歉让你困惑,我忘了添加标签silverlight。很抱歉让你困惑,我忘了添加标签silverlight。好的,谢谢。我在试,但是,他和Stackpanel有什么不同?我只看到它们两个的相同属性。是的,但它使用不同的布局。它将项目一个接一个地放在一起,当没有足够的空间时,它会“断线”。确实如此。奇怪的是,他开始在半个酒吧里表演。但它是行中唯一的元素。。。我将搜索出问题所在。您应该显示更多的XAML。我将您的代码粘贴到XAML编辑器中,它可以按预期工作。我可以显示更多XAML,但需要私下讨论。我们怎么开始呢?好的,谢谢。我在试,但是,他和Stackpanel有什么不同?我只看到它们两个的相同属性。是的,但它使用不同的布局。它将项目一个接一个地放在一起,当没有足够的空间时,它会“断线”。确实如此。奇怪的是,他开始在半个酒吧里表演。但它是行中唯一的元素。。。我将搜索出问题所在。您应该显示更多的XAML。我将您的代码粘贴到XAML编辑器中,它可以按预期工作。我可以显示更多XAML,但需要私下讨论。我们如何开始呢?我的stackPanel是网格的子对象(所以我必须在其中定义一个宽度,以便进行良好的包装?)。每次定义一个网格(使用列和行定义)不是要做很多工作吗?只是问问而已。谢谢你的解释。我想我会做一些关于xaml最佳结构的“家庭作业”。谢谢你的建议,我的代码并不是按照看起来最好的方式编写的。@Zaphod是的,它有点打字,但是它给了你很好的布局,可以动态地改变。请查看我在all Silverlight:OfficeExtreme.com中创建的这个网站。我的stackPanel是网格的子项(因此我必须在其中定义一个宽度,以便进行良好的包装?)。每次定义一个网格(使用列和行定义)不是要做很多工作吗?只是问问而已。谢谢你的解释。我想我会做一些关于xaml最佳结构的“家庭作业”。谢谢你的建议,我的代码并不是按照看起来最好的方式编写的。@Zaphod是的,它有点打字,但是它给了你很好的布局,可以动态地改变。