我遇到自动将StackPanel分解为下一行的问题。这是示例代码:
<StackPanel Orientation="Horizontal" Width="180">
<TextBlock.../>
<TextBlock.../>
<TextBlock.../>
<Image.../>
...
</StackPanel>
现在我想要达到这样的效果:当StackPanel中没有足够的空间用于另一个元素时,它应该放在新行中。我怎么能做到这一点(没有必要使用stackpanel)?
PS:我的目标是将文本和图像放在一行中(当没有足够空间容纳另一个元素时,它当然可以中断)。也许你可以提供比使用文本块和图像更好的解决方案?
答案 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 =“Horizontal”Width =“400”&gt;
....
&LT; / wrapPanel:WrapPanel&GT;
它应该做的伎俩...
信息取自:
答案 3 :(得分:0)
您可以使用GridView,它具有与WrapPanel类似的布局行为。