如何在WPF中将StackPanel的高度绑定到包含Grid的高度?

时间:2018-10-04 13:26:42

标签: wpf xaml

我对WPF来说还比较陌生,所以如果对此有一个简单的解决方案,对不起,请您提前谅解。但是,我试图将StackPanel的高度绑定到其包含的Grid。我知道StackPanel会自动调整大小以适合其元素,但我想将其绑定到Grid,以便它不会这样做。现在,堆栈面板不会随窗口调整大小,因为它仍然是 大小以适应其元素。

这是我到目前为止所拥有的:

<Grid x:Name="MainGrid" Grid.Row="2" Margin="1" Drop="Grid_Drop" 
      AllowDrop="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="175"/>
        <ColumnDefinition Width="5"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <StackPanel x:Name="SidePanel" Grid.Column="0" Height="{Binding 
                ActualHeight, ElementName=MainGrid, Mode=OneWay}">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition/>
            </Grid.RowDefinitions>
        <local:DeviceTreeView x:Name="deviceTree" PyngInfo="{Binding 
                              PyngSystemVm.PyngInfo}" Grid.Row="0"/>

    </StackPanel>

    <-- There is more code here but it is not important for answering this 
        question -->

</Grid>

我尝试将“ SidePanel”的高度绑定到“ MainGrid”的实际高度,但是当我运行此代码并检查元素时,Grid会随窗口调整大小,而StackPanel不会。 StackPanel和Grid甚至具有不同的高度,这对我来说没有意义,因为它们的高度应该绑定在一起。

我还尝试将整个StackPanel包裹在边界中并绑定到边界,但这也没有用。

1 个答案:

答案 0 :(得分:1)

您不需要绑定StackPanel的高度,只需将其VerticalAlignment设置为Stretch即可。但是...您仍然不会得到我想您想要的。 StackPanel仅堆叠其子控件,它不会调整它们(至少不在“堆叠”方向上)。考虑使用诸如Grid或UniformGrid之类的其他控件,或者只是扩展现有网格以包含行和列。