2014-07-11 42 views
3

我有一个2行2列的网格。 在0,0我有一个TextBlock的一些文字,可以改变由于本地化,在1,0我有一个图像。在WPF中适合网格单元大小的图像

下面是示例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> 

用作源的图像元素的图像的尺寸是未知的。

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

我试图在NoSizeDecorator包装图像,但这种方式图像根本没有出现,除非我指定图像的绝对高度和宽度在XAML,我不能做,因为我需要图像的宽度相同文本。

我该怎么办?

回答

9

你的代码应该已经做你想要什么,并增加了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> 

在这里,我们基本上设置从TextBlock.ActualWidthImage.Width属性,以确保Image不会增长太多大。没有必要使用昂贵的ViewBox控件来执行此操作。

+1

+1,但请注意'Stretch =“Uniform”'是默认值,所以不需要明确设置它。 – Clemens

+0

谢谢@Clemens(再次)...我已经相应地更新了我的答案。 – Sheridan

+0

谢谢,我实际上已经尝试过使用Width <-Tb.ActualWidth绑定,但可能已经与其他一些属性混淆了,并且无法使其工作。现在它可以正常工作,谢谢! – ale

相关问题