ActualHeight增长但不收缩

时间:2017-09-26 23:02:15

标签: wpf xaml datatemplate itemscontrol

我在使用WPF时遇到了奇怪的行为。

我的目标是让ItemsControl在每个项目的一侧有一条垂直线,从项目的顶部到底部。由于项目的高度可能不同,我将Line的{​​{1}}属性绑定到属于Y2的{​​{1}} {1}}。

这是XAML:

ActualHeight

一开始运行这个看起来很完美。一旦我开始缩小窗口的宽度,导致StackPanel s换行,并且生效 导致项目高度增长,然后将窗口大小调整回原始宽度(以及更高)。虽然Grid s已回到其原始状态(和高度),但项目的高度保持不变 - 卡在最高点,在文本下方留下巨大空隙,而<ItemsControl Grid.Row="1" BorderThickness="0" ItemsSource="{Binding ShipmentActivity}" > <ItemsControl.ItemTemplate> <DataTemplate> <Grid Name="ListBox"> <Grid.ColumnDefinitions> <ColumnDefinition Width="20"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Line Stroke="{StaticResource ButtonOutlineBrush}" X1="8" X2="8" Y1="0" Y2="{Binding ActualHeight, ElementName=ShipmentActivity}" StrokeThickness="1" /> <StackPanel Grid.Column="1" Margin=".1" x:Name="ShipmentActivity"> <StackPanel.Resources> <Style TargetType="TextBlock"> <Setter Property="TextWrapping" Value="Wrap"/> </Style> </StackPanel.Resources> <TextBlock Text="{Binding Status}" FontWeight="SemiBold" FontSize="13" /> <TextBlock Text="{Binding Location}" Foreground="Gray"/> <TextBlock Text="Wed, Sep 13, 2017, 8:29 PM (2 days ago)" Foreground="Gray"/> </StackPanel> </Grid> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> &# 39;高度不会缩小。 TextBlock绝对是值得责备的,因为删除该行可以解决问题。

甚至更奇怪的是,为TextBlock添加一个边距,即使最轻微的(.1)也能解决问题,并且这些项目缩小回预期的高度。

我做错了什么,或者这是一个错误?

1 个答案:

答案 0 :(得分:1)

我会使用 Border 元素来装饰 StackPanel ,而不是使用 Line 。然后只需相应地设置边框的BorderThickness属性。

因此你的XAML会是这样的:

<ItemsControl ...>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="1,0,0,0"
                BorderBrush="{StaticResource ButtonOutlineBrush}">
                <StackPanel ...>

您可以使用Border的Padding属性和/或StackPanel的Margin属性来区分这两个元素。