将项目放在列表框下方

时间:2016-12-29 12:43:01

标签: c# .net wpf

我不知道如何将元素放在列表框下面。列表框应该占据整个屏幕。

<StackPanel>
    <ListBox>
        <ListBoxItem>//Elements from ViewModel</ListBoxItem>
    </ListBox>
    <TextBlock>Additional elment</TextBlock>
</StackPanel> 

但滚动不起作用。我不能分配高,因为它是未知的

我会得到以下结果: enter image description here

1 个答案:

答案 0 :(得分:1)

例如,您可以使用DockPanel:

<DockPanel>
    <TextBlock DockPanel.Dock="Bottom">Additional element</TextBlock>
    <ListBox>
        <ListBoxItem>//Elements from ViewModel</ListBoxItem>
    </ListBox>
</DockPanel>

DockPanel中的最后一个元素,即本例中的ListBox,将填充剩余空间,除非您将DockPanel的LastChildFill属性设置为false:https://msdn.microsoft.com/en-us/library/system.windows.controls.dockpanel.lastchildfill(v=vs.110).aspx

StackPanels与滚动条不兼容。有关此问题的更多信息,请参阅我对以下问题的回答。

Horizontal scroll for stackpanel doesn't work

  

您的解决方案会在窗口底部生成其他元素,而不是列表框中的最后一项。我的问题不同。

然后使用网格:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <ListBox Grid.Row="0" />
    <TextBlock Grid.Row="1">Additional element</TextBlock>
    <!--  Grid.Row="2" = the rest of the window content... -->
</Grid>
  

我希望附加元素与其余元素一起滚动 - 它是一个按钮

使用CompositeCollection作为ListBox的ItemsSource,而不是直接绑定到源属性:

<ListBox>
    <ListBox.Resources>
        <CollectionViewSource x:Key="itemsSource" Source="{Binding YourViewModelSourceCollection}" />
    </ListBox.Resources>
    <ListBox.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding Source={StaticResource itemsSource}}" />
            <TextBlock>Additional element</TextBlock>
        </CompositeCollection>
    </ListBox.ItemsSource>
</ListBox>