如何使WPF组件占用所有可用空间?

Val*_*ion 4 wpf xaml mvvm wpf-controls

我有一个应用程序在用户控件之间切换很多,我希望它们延伸到窗口的最大大小,但有些东西阻止他们这样做,占用尽可能少的空间.

我注意到我在usercontrols中的组件调整大小(即锁定到控件底部的按钮保持原位,控件只是没有到达窗口的底部,按钮最终应该最终到达)并且我没有' t设置任何与大小相关的属性(我尝试了几个,但没有一个具有所需的效果).所以我假设问题在于显示控件的主要组件.这样设置如下:

<Window.Resources>
    <DataTemplate DataType="{x:Type vm:MessageViewModel}">
        <vw:MessageView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:ConnectionsViewModel}">
        <vw:ConnectionView/>
    </DataTemplate>
    ...
</Window.Resources>
<Grid>
    <ItemsControl ItemsSource="{Binding ViewModels}" Margin="0,20,0,0"/>
    ...
</Grid>
Run Code Online (Sandbox Code Playgroud)

我使用的解决方案归功于Erno:

更改

<ItemsControl ItemsSource="{Binding ViewModels}" Margin="0,20,0,0"/>
Run Code Online (Sandbox Code Playgroud)

<ItemsControl ItemsSource="{Binding ViewModels}" Margin="0,20,0,0">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
Run Code Online (Sandbox Code Playgroud)

Ern*_*rno 7

ItemsControl将项目放在ItemTemplate中,并将它们放在ItemsPanel中.

可以通过设置ItemsPanelTemplate来调整ItemsPanel.

默认情况下,ItemsPanel是StackPanel(垂直),StackPanels不会垂直分布行/拉伸项目.

所以你可以做的是在ItemsPanelTemplate中放置一个不同的控件,它可以根据需要拉伸和对齐项目.