我在使用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)也能解决问题,并且这些项目缩小回预期的高度。
我做错了什么,或者这是一个错误?
答案 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
属性来区分这两个元素。