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

时间:2012-05-18 13:36:01

标签: wpf xaml mvvm wpf-controls

我有一个应用程序可以在用户控件之间进行大量切换,我希望它们可以扩展到窗口的最大大小,但有些东西会阻止它们这样做,从而占用尽可能少的空间。

我注意到我在usercontrols中的组件应该调整大小(即锁定到控件底部的按钮保持原位,控件只是没有到达窗口的底部,按钮最终应该在那里结束)和我没有在它们上设置任何与尺寸相关的属性(我尝试了几个,但没有一个具有预期的效果)。所以我假设问题在于显示控件的主要组件。这样设置如下:

<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>

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

更改

<ItemsControl ItemsSource="{Binding ViewModels}" Margin="0,20,0,0"/>

<ItemsControl ItemsSource="{Binding ViewModels}" Margin="0,20,0,0">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>

1 个答案:

答案 0 :(得分:7)

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

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

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

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