我在WPF身上有一种奇怪的行为。
我在这里的目标是拥有一个ItemsControl,在每个项目的一侧都有一条垂直线,从项目的顶部到底部。由于项目的高度可能不同,我将Line的Y2属性绑定到属于Grid的StackPanel的ActualHeight。
以下是XAML:
<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>一开始运行这个似乎很完美。一旦我开始缩小窗口的宽度,导致TextBlock包装,实际上导致项目的高度增长,然后调整窗口的大小,使其恢复到原来的宽度(甚至更高),那么这个问题就很明显了。尽管TextBlock已恢复到原来的状态(和高度),但项目的高度仍保持不变--停留在最高点,在文本下方留下巨大的空白,而Line的高度没有缩小。在这里,Line绝对是罪魁祸首,因为删除这条线可以消除问题。
更奇怪的是,在StackPanel中添加一个空白--哪怕是最轻微的(.1) --解决了这个问题,项目就会收缩到预期的高度。
我是不是做错什么了,还是这是个窃听器?
发布于 2017-09-27 10:10:07
我会使用元素来装饰StackPanel,而不是使用Line。然后相应地设置边框的BorderThickness属性。
因此,您的XAML应该是这样的:
<ItemsControl ...>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderThickness="1,0,0,0"
BorderBrush="{StaticResource ButtonOutlineBrush}">
<StackPanel ...>您可以使用边框的Padding属性和/或StackPanel的Margin属性来分隔这两个元素。
https://stackoverflow.com/questions/46437043
复制相似问题