图像以适合WPF中的网格单元大小

时间:2014-07-11 12:59:04

标签: wpf image xaml grid

我有一个有2行2列的网格。 在0,0我有一个TextBlock,其中一些文本可以因本地化而改变,在1,0我有一个图像。

以下是示例XAML:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
        <TextBlock x:Name="Tb" Grid.Row="0" Grid.Column="0">Foobar</TextBlock>
        <Image Source="Foobar.jpg" Grid.Row="1" Grid.Column="0" />
    </Grid>
</Window>

用作Image元素源的图像大小未知。

我需要网格列#0与TextBlock文本一样宽。图像应该与列一样宽,并且应该正确设置其高度以保持纵横比。

我尝试用NoSizeDecorator包装图像,但这样图像根本不会出现,除非我在XAML中指定图像绝对高度和宽度,我不能这样做,因为我需要图像相同文字的宽度。

我该怎么做?

1 个答案:

答案 0 :(得分:10)

您的代码 应该已经做了您想要的事情,添加了Image.Width属性:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <TextBlock x:Name="Tb" Grid.Row="0" Grid.Column="0">Foobar</TextBlock>
    <Image Source="Foobar.jpg" Grid.Row="1" Grid.Column="0" 
        Width="{Binding ActualWidth, ElementName=Tb}" />
</Grid>

此处我们基本上设置Image.Width的{​​{1}}属性,以确保TextBlock.ActualWidth不会变得过大。没有必要使用昂贵的Image控件来执行此操作。