如何将列高度限制为另一个?

Mac*_*ius 5 wpf grid datatemplate

我在 WPF 中有一个网格,它由沿 2 列的 4 行组成,其中第 1 列包含一个图像控件,第 2 列包含 4 个文本块。问题是,Image 控件将自身大小调整为 Image 大小,并将列表框的条目扩展到过多 [Its in a DataTemplate] 并使所有内容看起来失真。我不想手动设置最大高度/宽度,因为我希望图像将自身大小调整为旁边的 4 个文本块的大小。有任何想法吗?

<DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Image Source="{Binding Logo, Converter={StaticResource BSConverter}}" Grid.Row="0" Grid.RowSpan="4" 
                           Grid.Column="0" Stretch="Uniform" SnapsToDevicePixels="True"/>
                    <TextBlock Text="{Binding Name}" Grid.Row="0" Grid.Column="1"/>
                    <TextBlock Text="{Binding Author}" Grid.Row="1" Grid.Column="1"/>
                    <TextBlock Text="{Binding Version}" Grid.Row="2" Grid.Column="1"/>
                    <TextBlock Text="{Binding Description}" Grid.Row="3" Grid.Column="1"/>
                </Grid>
            </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

提前致谢

Fre*_*lad 3

您可以在父列表框上使用 Grid.IsSharedSizeGroup 来确保所有项目的第一列具有相同的宽度,如下所示

<ListBox ...
         Grid.IsSharedSizeScope="True">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="GroupA"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                ...
Run Code Online (Sandbox Code Playgroud)

对于图像高度问题,您可以将 Height 绑定到父网格的 ActualHeight,FallbackValue 为 1.0(以确保图像的高度不会影响网格的高度)

<Image Source="{Binding Logo, Converter={StaticResource BSConverter}}"
       Grid.Row="0"
       Grid.RowSpan="4"
       Grid.Column="0"
       Stretch="Uniform" SnapsToDevicePixels="True"
       Height="{Binding RelativeSource={RelativeSource AncestorType=Grid},
                        Path=ActualHeight,
                        FallbackValue=1.0}"/>
Run Code Online (Sandbox Code Playgroud)