Windows Phone 7 wrappanel无法正常工作

时间:2012-05-20 16:27:01

标签: windows-phone-7 xaml silverlight-toolkit

我想在wp7应用程序中水平包装我的控件。这就是为什么我使用Silverlight工具包换行面板。它工作正常,直到第一行,但在第一行后我的第二个控制进入第二行。

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

在第一行之后,我的文本框控件低于其在包装中的错误,因此它必须正确到我的列表框项目。

enter image description here

<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中是水平包装。

3 个答案:

答案 0 :(得分:0)

包装面板正如所设想的那样工作。包裹面板带着它的孩子并排显示它们。因此,在您的示例中,外部面板并排显示两个子项[ListBox] [TextBox]。因为您将ListBox.ItemsPanel作为WrapPanel,它会尝试向左缩小。当列表框有足够的项目进行换行时,ListBox的宽度现在是控件的宽度。因此,WrapPanel仍然会并排显示子项,但现在第一个子项(ListBox)的宽度更大。

所以,你的第一个例子看起来像是(使用上面的并排示例) [ListBox宽度:300] [TextBlock] 第二个例子: [ListBox宽度:480] [TextBlock]

我很遗憾地说,没有简单的方法来做你要求的事情。

*我总是说在xaml中可以做任何事情。如果您愿意编写自定义控件,则可以完成此操作。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您想在包含控件列表的元素中使用Horizo​​ntalAlignment =“Right”。

之类的东西
<Grid HorizontalAlignment="Right">
    <StackPanel>...items...</StackPanel>
</Grid>

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