将 XAML TreeView MaxHeight 绑定到容器高度

Bind XAML TreeView MaxHeight to Containers Height

我有一个问题,我想将我的 TreeView 的最大高度绑定到我的 UserControl 的高度,但是绑定不起作用。

我尝试了以下方法

<UserControl>
    <StackPanel Name="Container"> 
         <TextBlock>Header</TextBlock>
         <TreeView MaxHeight="{Binding ElementName=Container,Path=ActualHeight}"></TreeView>
    </StackPanel>
</UserControl>

我希望,如果我调整 window 的大小,UserControl 也会调整大小,因此 TreeView 也会调整大小,因此如果 window 太小,TreeView 滚动条就会出现。 但是我得到的是没有滚动条,并且 TreeView 的内容到达 window 之外并且不可见。

这是一个荒谬的常见错误。 StackPanel 具有任何调整大小的功能,应该只用于最基本的布局目的。相反,使用 Grid Panel 会自动调整其子控件的大小:

<UserControl>
    <Grid> 
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <TextBlock>Header</TextBlock>
        <TreeView Grid.Row="1" />
    </Grid>
</UserControl>

您可以使用 DockPanel:

<DockPanel LastChildFill="True">
     <TextBlock DockPanel.Dock="Top">Header</TextBlock>
     <TreeView DockPanel.Dock="Top" MaxHeight="{Binding ElementName=Container,Path=ActualHeight}"></TreeView>   
</DockPanel>