Wpf TreeViewItems Presenter的高度等于父树视图

Wpf TreeViewItems Presenter的高度等于父树视图,wpf,xaml,user-controls,styles,Wpf,Xaml,User Controls,Styles,我有一个自定义样式,带有树视图项的模板。我希望items presenter以其所在网格行的宽度和高度显示内容,并将向上滚动留给子控件。这很有效。。。某种程度上。子对象确实执行滚动,但由于某种原因,高度设置为父对象的高度(树状视图),这会导致滚动混乱。我复制了下面的代码 <Style TargetType="TreeViewItem"> <Setter Property="Background" Value="Transparent"/>

我有一个自定义样式,带有树视图项的模板。我希望items presenter以其所在网格行的宽度和高度显示内容,并将向上滚动留给子控件。这很有效。。。某种程度上。子对象确实执行滚动,但由于某种原因,高度设置为父对象的高度(树状视图),这会导致滚动混乱。我复制了下面的代码

<Style TargetType="TreeViewItem">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Margin" Value="0"/>
        <Setter Property="Padding" Value="0"/>
        <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="Padding" Value="1,0,0,0"/>
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeViewItem">

                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="40"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>

                        <Border Name="Bd" Background="LightGray" BorderBrush="Black" Grid.Row="0"
                                            BorderThickness="1" Padding="{TemplateBinding Padding}">
                            <Grid Margin="5,0,5,0">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>

                                <Path x:Name="ExpandPath" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="1,1,1,1" 
                                              Fill="{StaticResource GlyphBrush}" Data="M 0 4 L 16 4 L 8 12 Z" Grid.Column="0"/>
                                <Label  Grid.Column="1" x:Name="PART_Header" Content="{TemplateBinding Header}" FontSize="18" FontWeight="Bold"
                                                               HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                            </Grid>
                        </Border>
                        <ItemsPresenter Name="ItemsHost" Grid.Row="1"/>


                    </Grid>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded" Value="false">
                            <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/>
                            <Setter Property="Data" TargetName="ExpandPath" Value="M 8 0 L 16 8 L 8 16 Z"/>
                        </Trigger>
                        <Trigger Property="HasItems" Value="false">
                            <Setter TargetName="ExpandPath" Property="Visibility" Value="Collapsed"/>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="HasHeader" Value="false"/>
                                <Condition Property="Width" Value="Auto"/>
                            </MultiTrigger.Conditions>
                            <Setter TargetName="PART_Header" Property="MinWidth" Value="75"/>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="HasHeader" Value="false"/>
                                <Condition Property="Height" Value="Auto"/>
                            </MultiTrigger.Conditions>
                            <Setter TargetName="PART_Header" Property="MinHeight" Value="19"/>
                        </MultiTrigger>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter Property="IsExpanded" Value="True"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="False">
                            <Setter Property="IsExpanded" Value="False"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

        <Style.Resources>
            <Style TargetType="{x:Type TreeViewItem}">
            </Style>
        </Style.Resources>
    </Style>

我找到了一种在C#中实现这一点的方法,即在选择更改时设置子元素的宽度和高度