Преобразование изображения с ResourceDictionary - PullRequest
2 голосов
/ 08 марта 2011

Я пытаюсь переместить, а также масштабировать изображение при перемещении мыши / изменении источника изображения.Я написал следующий стиль для изображения, но он не работает:

 <Style x:Key="MovingImage" TargetType="{x:Type Image}">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="Stretch" Value="Uniform"/>
    <Setter Property="VerticalAlignment" Value="Top"/>
    <Setter Property="Width" Value="auto"/>
    <Setter Property="Height" Value="auto"/>
    <Style.Resources>
        <Storyboard x:Key="TransformImage">
            <DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.Y)"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(ScaleTransform.ScaleX)"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(ScaleTransform.ScaleY)"></DoubleAnimation>
        </Storyboard>
    </Style.Resources>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource TransformImage}" />
            </Trigger.EnterActions>
        </Trigger>
    </Style.Triggers>
</Style>

1 Ответ

1 голос
/ 17 сентября 2012

Вам нужно сделать две вещи, чтобы это заработало.Сначала определите группу преобразований по умолчанию, которую вы хотите установить (так что в вашем случае соответствующие преобразования внутри группы преобразований)

<Setter Property="RenderTransform">
    <Setter.Value>
        <TransformGroup>
            <TranslateTransform />
            <ScaleTransform />
        </TransformGroup>                        
    </Setter.Value>
</Setter>

Затем, когда вы на самом деле ссылаетесь на целевое свойство, вы должны явно указать точкугруппы трансформации, которую вы хотите изменить.Я бы также предложил добавить некоторые действия выхода, чтобы ваше изображение не исчезло навсегда =)

<DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"></DoubleAnimation>
<DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"></DoubleAnimation>
<DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"></DoubleAnimation>
<DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"></DoubleAnimation>
...