簡體   English   中英

ScrollViewer中的Autoresize ListBox

[英]Autoresize ListBox inside ScrollViewer

在我的應用程序中,我有一個Window 它包含左側菜單,標題和內容位置。

該內容正在動態加載-在那里放置了一個UserControl 這些UserControls是多種多樣的。 從一個TextBlock到相當復雜的頁面。 為了確保所有內容都是可見的,我必須用ScrollViewer包裝它(我的意思是在MyWindow.xaml中)。 一切正常,直到需要在內容中放置ListView為止。

或多或少的代碼看起來像這樣:

<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中,我想要:

  • 按鈕總是在最底部
  • 列表框填充剩余的整個空間(也隨窗口一起調整大小)
  • 避免硬編碼列表框的高度

那可能嗎?

使用DockPanel而不是Grid。 DockPanel具有一個名為LastChhildFill的屬性。 默認情況下為true。 如果將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM