2012-10-03 4 views
1

이미지의 WidthActualHeight에 바인딩하려고합니다. (높이는 레이아웃에 의해 결정되며 정사각형이되고 싶습니다. 더 좋은 방법이 있다면 듣다).ActualHeight 바인딩 너비 - 부분적으로 만 작동

<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> 

지금이 부분적으로 작동

내 XAML입니다 .

그러나 페이지로 이동하거나 그 다음 페이지로 이동하면 이미지가 표시되지 않습니다.

충분히 흥미롭게도로드 후 이미지의 ActualWidth는 ActualHeight가 아닙니다. 그것은 적다. 그리고 그리드의 폭은 ... 그냥 일반 이상한 어느 ... favImage1.ActualWidth

185.13514709472656

favImage1.ActualHeight

274.0

((

더 적은이다 FrameworkElement) favImage1.Parent) .ActualWidth

138.0

올바른 방법은 무엇입니까?

+0

당신은 어떤 트리거 폭의 값을 설정할 수 있습니까? –

+0

ActualHeight를 의미하는 트리거의 속성에 바인딩 하시겠습니까? –

답변

0

잘 이해하면 이미지가 정사각형으로 유지되는지 확인하고 싶습니다.

저는 이것이 xaml에서 이미지를 조작하는 올바른 방법이 아니라고 생각합니다. 차라리 다음 UniformToFill에 이미지 Stretch 속성을 변경하려면 Border의 이미지를 포장하고 뭔가 해결하기 위해 Border의 크기를 설정합니다 :

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

또 다른 옵션은 이미지를 포장하기 위해 ViewBox을 사용하는 것입니다. 여기에서 Stretch 속성의 다른 값의 효과를 볼 수 있습니다

ViewBox.Stretch Property

+0

답장을 보내 주셔서 감사합니다. 레이아웃으로 높이를 설정해야하는 경우에는 도움이되지 않습니다 (VerticalAlignment = 더 높은 요소 중 하나에 늘이기 (더 구체적으로 편집 할 예정입니다.) 그래서 실제로 치수를 지정할 수 없습니다. (그냥 "높이는 레이아웃에 의해 결정되며 나는 정사각형이되기를 원합니다." –