0

我想在 wp7 应用程序中水平包装我的控件。这就是我使用 Silverlight 工具包 Wrap Panel 的原因。它在第一行之前工作正常,但在第一行之后,我的第二个控件进入第二行。

http://s13.postimage.org/8oxnxxcef/First.png

在第一行之后,我的文本框控件低于它在包装面板中的错误,因此它必须直接进入我的列表框项目。

在此处输入图像描述

<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>

请告诉我如何解决这个问题,所以我的第二个控件总是在列表框项目之后,因为它在包装面板中,并且控件水平包装。

4

3 回答 3

0

我可能误解了这个问题,但你为什么不能使用 StackPanel?

只需使用 StackPanel 并将其 Orientation 属性设置为 Horizo​​ntal。WrapPanel 不适合您尝试做的事情。

于 2012-05-22T07:29:46.407 回答
0

您想在包含控件列表的元素中使用 Horizo​​ntalAlignment="Right"。就像是

<Grid HorizontalAlignment="Right">
    <StackPanel>...items...</StackPanel>
</Grid>

可能会成功。但是请注意,我还没有尝试过这个。

于 2012-11-06T10:54:57.663 回答
0

包装面板按预期工作。wrap 面板获取它的孩子并并排显示它们。因此,在您的示例中,外部面板并排显示两个子 [ListBox][TextBox]。因为您将 ListBox.ItemsPanel 作为 WrapPanel,所以它会尝试向左收缩。当您的列表框有足够的项目来换行时,列表框的宽度现在是控件的宽度。所以 WrapPanel 仍然并排显示孩子,但现在第一个孩子 (ListBox) 有更大的宽度。

因此,您的第一个示例看起来像(使用上面的并排示例_ [ListBox width:300][TextBlock] 第二个示例:[ListBox width:480][TextBlock]

我很抱歉地说,没有简单的*方法来做你所要求的。

*我总是说在 xaml 中一切皆有可能。如果您愿意编写自定义控件,则可以完成此操作。

于 2012-05-21T05:32:47.227 回答