3

我需要显示ListBox动态内容(所以我不知道它的高度)及其Button下方。所以用户应该能够滚动 ListBox 以结束并查看按钮。

在 Android 中,我会使用RelativeLayoutbelow属性作为按钮或其他解决方案,但在 WP 中我不知道该怎么做。

我尝试过的:

1) 全部投入StackPanel

<StackPanel>
    <ListBox />
    <Button />
</StackPanel>

这不起作用,因为 StackPanel 阻止了 ListBox 滚动。

2) 好的,让我们将 ListBox 放入 Grid

<StackPanel>
    <Grid>
        <ListBox />
    </Grid>
    <Button />
</StackPanel>

什么都没发生。

3)将所有内容放入 Grid 并使用 Grid.Row 不起作用。

4)让我们全部投入并动态Grid设置边距Button

<Grid>
    <ListBox />
    <Button />
</Grid>

好的,这是可行的,但这不是一个好的解决方案,因为我需要ListBox每次处理填充并重置按钮的边距。坏坏坏。

PS 另外,我可以将按钮作为 ListBox 项目(不错,但不好:)

请帮帮我...

4

1 回答 1

7

如果我理解正确,您需要一个像这样定义的简单 Grid:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <ListBox />
    <Button Grid.Row="1" Height="80"/>
</Grid>

通过将零行的高度设为“星形”并将第一行设为 Auto,ListBox 将填充剩余空间,而 Button 仅 80(您可以将其更改为您喜欢的任何内容)。ListBox 会自动放到第 0 行,因为如果没有明确设置,这是默认设置。

如果您不想将按钮固定在页面上而是使用 ListBox 滚动,您可以像这样编辑 ListBox 模板:

<Style x:Key="ListBoxWithButtonStyle" TargetType="ListBox">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/>
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Padding" Value="0"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBox">
                <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <ItemsPresenter/>
                        <Button Content="Touch me" Height="80" Grid.Row="1"/>
                    </Grid>
                </ScrollViewer>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

然后应用于 ListBox:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <ListBox Style="{StaticResource ListBoxWithButtonStyle}">

    </ListBox>
</Grid>
于 2013-04-10T13:30:59.573 回答