Binding Width to ActualHeight - работает только частично
Я пытаюсь связать изображение Width
к его ActualHeight
(высота определяется макетом, и я хочу, чтобы он был квадратным - если есть лучший способ сделать это, я хотел бы услышать).
Это мой 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 ответ
Если я вас правильно понимаю, вы хотели бы убедиться, что ваше изображение остается квадратным.
Я думаю, что это неправильный способ манипулировать изображением в xaml. Я бы предпочел завернуть изображение в Border
и установить Border
Размер, чтобы что-то исправить, а затем изменить изображение Stretch
собственность на UniformToFill
:
<Border Width="110" Height="110">
<Image Source="my.jpg" Stretch="UniformToFill" />
</Border>
Другой вариант заключается в использовании ViewBox
обернуть изображение. Здесь вы можете увидеть влияние различных значений для Stretch
имущество: