首页 文章

将宽度绑定到ActualHeight - 仅部分工作

提问于
浏览
1

我试图将图像的 Width 绑定到它的 ActualHeight (高度由布局确定,我希望它是正方形 - 如果有's a better way of doing this, I' d喜欢听到的话) .

这是我的XAML:

<Grid Grid.Row="1" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="auto"/>
    <ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="*"/>
    <RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Image x:Name="favImage1" Source="{Binding Controller.FailStorage.FailRoamingStorage.Favorites[0].ImageUri}" Grid.Column="0" Grid.Row="0" Style="{StaticResource FavoriteImageStyle}" Width="{Binding ActualHeight, ElementName=favImage1, Mode=OneWay}"/>
</Grid>

样式定义如下:

<Style x:Key="FavoriteImageStyle" TargetType="Image">
        <Setter Property="Stretch" Value="UniformToFill"/>
        <Setter Property="Margin" Value="0,0,12,12"/>
        <Setter Property="VerticalAlignment" Value="Stretch"></Setter>
    </Style>

现在,这部分工作 - 在向集合添加项目后导航回页面似乎工作 .

但任何加载或后续导航到页面都会使图像无法显示 .

有趣的是,加载后,图像的ActualWidth不是ActualHeight . 它少了 . 而网格的宽度更小......这简直就是奇怪......

favImage1.ActualWidth 185.13514709472656 favImage1.ActualHeight 274.0((FrameworkElement)favImage1.Parent).ActualWidth 138.0

这样做的正确方法是什么?

1 回答

  • 0

    如果我理解正确,您需要确保您的图像保持正方形 .

    我认为这不是在xaml中操纵图像的正确方法 . 我宁愿将图像包装在 Border 中,并将 Border 的大小设置为修复,然后将图像 Stretch 属性更改为 UniformToFill

    <Border Width="110" Height="110">
        <Image Source="my.jpg" Stretch="UniformToFill" />
    </Border>
    

    另一种选择是使用 ViewBox 来包装图像 . 在这里,您可以看到 Stretch 属性的不同值的效果:

    ViewBox.Stretch Property

相关问题