0

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

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

Itried删除面板上的宽度,但随后,没有更多的包装......

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

谢谢你。

4

3 回答 3

2

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

您还应该考虑移除Width面板的固定部分。

于 2013-10-02T10:12:36.367 回答
1

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

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

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

格雷格

于 2013-10-02T17:42:22.670 回答
0

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

于 2013-10-02T10:05:53.350 回答