Как можно увеличить размер изображения (создать иллюзию выделения) с помощью анимации WPF? - PullRequest
5 голосов
/ 20 декабря 2009

Я довольно новичок в WPF и еще новее в анимации в WPF. Я знаю, что есть раскадровки и т. Д. Но я ищу определенный эффект, чтобы я мог оттуда работать и возиться с ним.

Может ли кто-нибудь просто дать мне простой пример управления изображением MouseDown (поскольку в этом элементе управления нет события Click в этом элементе управления) увеличивает изображение с помощью изящной анимации?

Спасибо, братаны.

Ответы [ 2 ]

8 голосов
/ 20 декабря 2009

Следующее будет масштабировать изображение относительно его текущего размера, а не изменять абсолютные значения. Это может быть более гибким.

<Page xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
  <Image x:Name="MyImage" Source="c:\myImage.jpg" Width="250" Height="250">
    <Image.RenderTransform>
      <ScaleTransform x:Name="ImageScale" ScaleX="1" ScaleY="1" RenderTransformOrigin="0.5, 0.5"/>
    </Image.RenderTransform>
    <Image.Triggers>
      <EventTrigger RoutedEvent="Image.MouseDown">
        <BeginStoryboard>
          <Storyboard>
            <DoubleAnimation Storyboard.TargetName="ImageScale" Storyboard.TargetProperty="(ScaleTransform.ScaleX)" To="1.5" Duration="0:0:0.25" AutoReverse="True"/>
            <DoubleAnimation Storyboard.TargetName="ImageScale" Storyboard.TargetProperty="(ScaleTransform.ScaleY)" To="1.5" Duration="0:0:0.25" AutoReverse="True"/>
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger>
    </Image.Triggers>
  </Image>
</Page>
1 голос
/ 20 декабря 2009

Вот пример, который делает то, что я думаю, что вы хотите:

<Window x:Class="WpfApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="600" Width="600">
    <Window.Resources>
        <Storyboard x:Key="ScaleImageStoryboard">
            <DoubleAnimation Duration="0:0:0.5" From="300" To="400" Storyboard.TargetName="Image" Storyboard.TargetProperty="Height"/>
            <DoubleAnimation Duration="0:0:0.5" From="300" To="400" Storyboard.TargetName="Image" Storyboard.TargetProperty="Width"/>
        </Storyboard>
    </Window.Resources>
    <Grid>
        <Image Name="Image" Source="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg" Stretch="Fill" Width="300" Height="300">
            <Image.Triggers>
                <EventTrigger RoutedEvent="Image.MouseDown">
                    <BeginStoryboard Storyboard="{StaticResource ScaleImageStoryboard}"/>
                </EventTrigger>
            </Image.Triggers>
        </Image>
    </Grid>
</Window>

Здесь изображение начинается с размера 300x300 пикселей. Когда происходит событие Image.MouseDown, триггер начинает раскадровку, которая меняет размер изображения на 400x400 за полсекунды.

Однако, если вы хотите эффект, который временно влияет на размер изображения и не влияет на макет, вы должны использовать:

<Window x:Class="WpfApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="600" Width="600">
    <Window.Resources>
        <Storyboard x:Key="ScaleImageStoryboard">
            <DoubleAnimation Duration="0:0:0.2" From="1" To="1.2" AutoReverse="True"
                             Storyboard.TargetName="ScaleImage" Storyboard.TargetProperty="ScaleX"/>
            <DoubleAnimation Duration="0:0:0.2" From="1" To="1.2" AutoReverse="True" 
                             Storyboard.TargetName="ScaleImage" Storyboard.TargetProperty="ScaleY"/>
        </Storyboard>
    </Window.Resources>
    <Grid>
        <Image Name="Image" Source="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg" 
               Stretch="Fill" Width="300" Height="300"
               RenderTransformOrigin="0.5, 0.5">
            <Image.RenderTransform>
                <ScaleTransform x:Name="ScaleImage"/>
            </Image.RenderTransform>
            <Image.Triggers>
                <EventTrigger RoutedEvent="Image.MouseDown">
                    <BeginStoryboard Storyboard="{StaticResource ScaleImageStoryboard}"/>
                </EventTrigger>
            </Image.Triggers>
        </Image>
    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...