首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActualHeight生长但不收缩

ActualHeight生长但不收缩
EN

Stack Overflow用户
提问于 2017-09-26 23:02:14
回答 1查看 253关注 0票数 0

我在WPF身上有一种奇怪的行为。

我在这里的目标是拥有一个ItemsControl,在每个项目的一侧都有一条垂直线,从项目的顶部到底部。由于项目的高度可能不同,我将LineY2属性绑定到属于GridStackPanelActualHeight

以下是XAML:

代码语言:javascript
复制
<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) --解决了这个问题,项目就会收缩到预期的高度。

我是不是做错什么了,还是这是个窃听器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-27 10:10:07

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

因此,您的XAML应该是这样的:

代码语言:javascript
复制
<ItemsControl ...>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border BorderThickness="1,0,0,0"
                BorderBrush="{StaticResource ButtonOutlineBrush}">
                <StackPanel ...>

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46437043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档