WPF: Zoom анимация управления пользователем - PullRequest
4 голосов
/ 16 апреля 2011

Я создал пользовательский элемент управления:

<UserControl ...>
  <Grid DataContext="{Binding UserContrlViewModel>
    <Grid Width="200" Height="100" RenderTransformOrigin="0.5,0.5">
      <Grid.Resources>
        <Storyboard x:Key="zoomIn">
          <DoubleAnimation 
              Storyboard.TargetProperty="ScaleTransform.ScaleX" 
              From="0" 
              To="1" 
              Duration="0:0:1" /> 
          <DoubleAnimation 
              Storyboard.TargetProperty="ScaleTransform.ScaleY" 
              From="0"        
              To="1" 
              Duration="0:0:1" />
        </Storyboard>
      </Grid.Resources>
      <Grid.RenderTransform>
        <ScaleTransform />
      </Grid.RenderTransform>
      <Grid.Style>
        <Style TargetType="Grid">
          <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsActive}" Value="True">
              <DataTrigger.EnterActions>
                <BeginStoryboard>
                  <StaticResource ResourceKey="zoomIn" />
                </BeginStoryboard>
              </DataTrigger.EnterActions>
            </DataTrigger>
          </Style.Triggers>
        </Style>
      </Grid.Style>

      <TextBlock Width="60" Text="Input" />
      <TextBox Width="80" Margin="80,0,0,0" />

    </Grid>
    ...
  </Grid>
</UserControl>

Чего я хочу добиться, так это, когда свойство IsActive класса модели представления пользовательского элемента управления установлено на true, запускается анимация zoomIn. Эта анимация должна увеличивать сетку с ее содержимым внутри. Когда я запускаю анимацию, я получаю следующее сообщение об ошибке:

Невозможно разрешить все ссылки на свойства в пути свойства 'ScaleTransform.ScaleX'. Убедитесь, что применимые объекты поддерживают свойства.

Что не так с моей анимацией? Как мне реализовать описанный зум в анимации? Благодарю.

1 Ответ

2 голосов
/ 16 апреля 2011

Я понял:

  • <ScaleTransform> должны иметь <ScaleTransform ScaleX="0.5" ScaleY="0.5" /> свойства, установленные, чтобы, например, масштабирование начиналось с 50%.
  • В первом <DoubleAnimation> значение свойства Storyboard.TargetProperty должно быть изменено с "ScaleTransform.ScaleX" на "RenderTransform.ScaleX".
  • Во втором <DoubleAnimation> значение Storyboard.TargetProperty свойство должно быть изменено с "ScaleTransform.ScaleY" на "RenderTransform.ScaleY".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...