如何将高度绑定到父亲的身高减去另一个项目的身高

时间:2017-09-21 08:31:48

标签: wpf xaml

我有一个ListBox,它在它上面显示一个Image和一个Text。我已将DataTemplate绑定到具有字符串Str和图像Image的自定义MyImage类。由于周围的StackPanel是水平的,因此下一个图像将出现在第一个图像的右侧。

我在将图像的高度设置为填充整个ListBox的高度减去文本的高度和边距的值时遇到问题。 在下面的代码中,我将它绑定到ListBox listboxMyImages的ActualHeight。 我希望能够从该值中减去TextBlock的高度。最好的方法是什么?

enter image description here

<ListBox x:Name="listboxMyImages"  Margin="10,10,10,10">
                                        <ListBox.ItemsPanel>
                                            <ItemsPanelTemplate>
                                                <StackPanel Orientation="Horizontal"/>
                                            </ItemsPanelTemplate>
                                        </ListBox.ItemsPanel>
                                        <ListBox.ItemTemplate>
                                            <DataTemplate DataType="{x:Type local:MyImage}">
                                                <StackPanel>
                                                    <TextBlock x:Name="lblMyImage" Margin="3" Text="{Binding Str}" />
                                                    <Image Margin="3" Source="{Binding Image}"  Height="{Binding ElementName=listboxMyImages, Path=ActualHeight }"/>
                                                </StackPanel>
                                            </DataTemplate>
                                        </ListBox.ItemTemplate>
                                    </ListBox>

2 个答案:

答案 0 :(得分:0)

您可以尝试使用这样的网格,而不是使用StackPanel:

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

不确定它是否有效,因为我现在无法尝试。

答案 1 :(得分:0)

使用另一个小组 - Grid有2行

<Grid>

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

<TextBlock x:Name="lblMyImage" Margin="3" Text="{Binding Str}" />
<Image Grid.Row="1" Margin="3" Source="{Binding Image}"/>

</Grid>

图像将拉伸并获取所有可用的高度