0

在我的应用程序中,我有一个Window. 它包含左侧菜单、标题和内容位置。

这个内容是动态加载的——aUserControl被放在那里。这些UserControls是多种多样的。从只是一个TextBlock非常复杂的页面。为了确保所有内容都可见,我必须用一个ScrollViewer(我的意思是在 MyWindow.xaml 中)包装它。在我需要ListView在内容中添加 a 之前,一切正常。

或多或少的代码看起来像这样:

<ScrollViewer> // this is the wrapping viewer actually it's in a different file
    <UserControl>
        ......
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10*"/>
                <ColumnDefinition Width="20*"/>
            </Grid.ColumnDefinitions>
            <ListView  ItemsSource="{Binding Entities}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Style="{StaticResource Value}" Text="{Binding WorkOrderNumber}"/>
                            <TextBlock Style="{StaticResource Value}" Text="{Binding ActionType}"/>
                            <TextBlock Style="{StaticResource Value}" Text="{Binding StartDate}"/>
                            <TextBlock Style="{StaticResource Value}" Text="{Binding StopDate}"/>
                            <Separator/>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Whatever.. Grid.Row="0" Grid.Column="1"/>
            <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right">
                <Button Style="{StaticResource CustomButton}" Content="Previous" />
                <Button Style="{StaticResource CustomButton}" Content="Current" />
                <Button Style="{StaticResource CustomButton}" Content="Next" />
            </StackPanel>
        </Grid>
    </UserControl>
</ScrollViewer>

结果是列表框没有滚动条并且变高。滚动条仅在窗口的滚动查看器中。

所以在我的 UserControl 我想要:

  • 按钮始终位于最底部
  • 填充整个剩余空间的列表框(也与窗口一起调整大小)
  • 避免硬编码列表框的高度

那可能吗?

4

1 回答 1

0

使用 DockPanel 而不是 Grid。DockPanel 有一个名为 LastChhildFill 的属性。默认情况下为真。如果您将 ListBox 设置为最后一个 Child,它将填满所有空间:

<ScrollViewer>
    <DockPanel>
        <StackPanel DockPanel.Dock="Bottom"
                    Orientation="Horizontal"
                    HorizontalAlignment="Center">
            <Button Style="{StaticResource CustomButton}"
                    Content="Previous" />
            <Button Style="{StaticResource CustomButton}"
                    Content="Current" />
            <Button Style="{StaticResource CustomButton}"
                    Content="Next" />
        </StackPanel>
        <ListView >
        </ListView>
    </DockPanel>
</ScrollViewer>

但是这个设置会使按钮消失。我的意思是它们总是在列表框的底部。所以也许你需要删除 ScrollViewer

于 2012-12-28T05:08:43.480 回答