9

我遇到了自动将 StackPanel 分解到下一行的问题。这是示例代码:

<StackPanel Orientation="Horizontal" Width="180">
   <TextBlock.../>
   <TextBlock.../>
   <TextBlock.../>
   <Image.../>
    ...
</StackPanel>

现在我想实现这样的目标:当 StackPanel 中的另一个元素没有足够的空间时,它应该放在新行中。我怎样才能做到这一点(没有必要使用stackpanel)?

PS:我的目标是将文本和图像放在一行中(当没有足够的空间容纳另一个元素时,它当然会中断)。也许您可以提供比使用文本块和图像更好的解决方案?

4

4 回答 4

16

试试 WrapGrid,它应该做你想做的事:http: //msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.wrapgrid.aspx

唯一的问题(这不是一件坏事)是 WrapGrid 只能在 ItemsControl 中显示项目,因此请以这种方式使用它(将 ListView 更改为任何 ItemsControl):

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <WrapGrid Orientation="Horizontal" />
    </ItemsPanelTemplate>
</ListView.ItemsPanel>
于 2012-07-19T16:31:03.773 回答
2

使用 VariabeSizedWrapGrid 而不是 StackPanel,请参阅http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.variablesizedwrapgrid.aspx

对于多个 TextBlock,请考虑使用具有多个 Run 的单个 textBlock。您的图像当然不能包含在运行中,但是一个带有两个运行的 TextBlock 比两个连续的 TextBlock 更好。

更新:这实际上可能根本无法帮助您获得所需的布局。您可能需要查看 RichTextBlock 控件,请参阅http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.richtextblock.aspx

于 2012-07-19T15:47:45.423 回答
2

开箱即用,没有可用于 WinRT 的 WrapPanel。至少现在不是……但是与此同时,有一种解决方法……我已经对其进行了测试并且可以正常工作。

您可以在以下链接中查看以下链接。

http://www.codeproject.com/Articles/24141/WrapPanel-for-Silverlight-2-0

由于 WrapPanel 继承自 Panel 类,因此您可以创建 WrapPanel 或简单地使用上述 SLV 2 应用程序中的 WrapPanel.cs 代码。

然后简单地包含类似的代码

xmlns:wrapPanel="使用:yourWinRTApp"
....

<wrapPanel:WrapPanel Orientation="Horizo​​ntal" Width="400" >
....
</wrapPanel:WrapPanel>

它应该可以解决问题...

资料取自:

http://www.michielpost.nl/PostDetail_75.aspx

于 2012-08-30T19:09:54.603 回答
0

您可能会使用 GridView,它具有与 WrapPanel 类似的布局行为。

于 2012-07-19T14:34:02.097 回答