【问题标题】:StackPanel Orientation in xamlxaml 中的 StackPanel 方向
【发布时间】:2013-10-02 09:40:01
【问题描述】:

我的 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>

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

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

我不明白。即使同一个 Grid 上有 stackPanel,它们也不应该干扰 wrap 面板吧?

谢谢。

【问题讨论】:

  • WPF?银光?视窗电话?视窗 8?更新你的标签。
  • 也许问题是硬编码宽度 od StackPanel (Width="560")。如果它在网格中,则应该没有必要,它可能会导致您所描述的结果。
  • @EliArbel 你的权利。添加银光标签。布力:如果我去掉宽度,我就不会换行了。

标签: silverlight xaml silverlight-4.0 stackpanel


【解决方案1】:

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

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

【讨论】:

  • 好的,谢谢。我正在尝试,但是,他与 Stackpanel 有什么不同?我在他们两个中只看到相同的属性。
  • 是的,但它使用不同的布局。它将项目彼此相邻放置,当空间不足时,它会“换行”。
  • 确实如此。奇怪的是,他开始在罐子的一半展示。但它是该行中唯一的元素......我会搜索有什么问题。
  • 您应该展示更多的 XAML。我将您的代码粘贴到 XAML 编辑器中,它按预期工作。
  • 我可以展示更多 xaml,但在私人讨论中。我们如何开始?
【解决方案2】:

尝试使用 Grid 而不是 StackPanel。 StackPanel 的问题是它们没有向 Visual Tree 报告它们空间不足。这不是错误,它只是它们的方式,并且在您需要时是合适的。但我避免使用它们,除了最里面的元素。但是不要在 StackPanels 中使用 StackPanels,因为您将失去 TextWrapping/Scrolling,而只会让元素落在页面的右侧或底部。

其次,确保您的外部容器设置为限制宽度。例如,在您的布局根中,给它一列,并设置 * 的宽度,这意味着 =“可用空间,但不是更多”

一旦您的外部容器受到约束,您的 TextBlock 就会正确包装。

格雷格

【讨论】:

  • 好吧,我的 stackPanel 是网格的子项(所以我必须在其中定义一个宽度,才能有良好的包装?)。每次定义一个网格(带有列和行定义)不是很多工作吗?只是问问而已。并感谢您的解释。
  • 我想我会在 xaml 最佳结构上做一些“功课”^^。谢谢你的建议我的代码并没有真正做到最好。
  • @Zaphod 是的,这有点打字,但它为您提供了可以动态更改的漂亮布局。看看我在 Silverlight 中制作的这个网站:OfficeExtreme.com
【解决方案3】:

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

【讨论】:

  • 对不起,我忘了添加标签silverlight。
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多