我想在wp7应用程序中水平包装我的控件。这就是为什么我使用Silverlight工具包换行面板。它工作正常,直到第一行,但在第一行后我的第二个控制进入第二行。
在第一行之后,我的文本框控件低于其在包装中的错误,因此它必须正确到我的列表框项目。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,0,0">
<StackPanel>
<toolkit:WrapPanel Orientation="Horizontal">
<ListBox Name="lstDemo" SelectionChanged="lstDemo_SelectionChanged">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel>
</toolkit:WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" Margin="5,0,0,0"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBox Name="txtHello" Margin="5,0,0,0" FontSize="20" />
</toolkit:WrapPanel>
</StackPanel>
</Grid>
请告诉我如何解决这个问题,以便我的第二个控件总是在listbox项之后,因为它在wrapppanel和control中是水平包装。
答案 0 :(得分:0)
包装面板正如所设想的那样工作。包裹面板带着它的孩子并排显示它们。因此,在您的示例中,外部面板并排显示两个子项[ListBox] [TextBox]。因为您将ListBox.ItemsPanel作为WrapPanel,它会尝试向左缩小。当列表框有足够的项目进行换行时,ListBox的宽度现在是控件的宽度。因此,WrapPanel仍然会并排显示子项,但现在第一个子项(ListBox)的宽度更大。
所以,你的第一个例子看起来像是(使用上面的并排示例) [ListBox宽度:300] [TextBlock] 第二个例子: [ListBox宽度:480] [TextBlock]
我很遗憾地说,没有简单的方法来做你要求的事情。
*我总是说在xaml中可以做任何事情。如果您愿意编写自定义控件,则可以完成此操作。
答案 1 :(得分:0)
我可能误解了这个问题,但为什么你不能使用StackPanel?
只需使用StackPanel并将其Orientation属性设置为Horizontal。 WrapPanel不适合你想要做的事情。
答案 2 :(得分:0)
您想在包含控件列表的元素中使用HorizontalAlignment =“Right”。
之类的东西<Grid HorizontalAlignment="Right">
<StackPanel>...items...</StackPanel>
</Grid>
可能会成功。但是,请注意,我没有尝试过这个。