Windows 8 WrapPanel

时间:2012-07-19 14:30:39

标签: windows windows-8 microsoft-metro winrt-xaml

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

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

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

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

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

开箱即用,WinRT没有可用的WrapPanel。至少目前不... 然而在此期间有一个解决方法......我已经测试了它并且它可以工作。

您可以通过以下链接查看以下链接。

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

由于WrapPanel继承自Panel类,您可以创建WrapPanel或只使用 您可以在上面的SLV 2应用程序中找到WrapPanel.cs代码。

然后只需包含类似的代码

的xmlns:wrapPanel = “使用:yourWinRTApp”
....

&lt; wrapPanel:WrapPanel Orientation =“Horizo​​ntal”Width =“400”&gt;
 ....
&LT; / wrapPanel:WrapPanel&GT;

它应该做的伎俩...

信息取自:

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

答案 3 :(得分:0)

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