我有一个有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中指定图像绝对高度和宽度,我不能这样做,因为我需要图像相同文字的宽度。
我该怎么做?
答案 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
控件来执行此操作。