Анимация UserControl XAML - PullRequest
       10

Анимация UserControl XAML

4 голосов
/ 29 ноября 2011

Я безуспешно пытался оживить открытие UserControl и задавался вопросом, может ли кто-нибудь помочь?

У меня есть UserControl, который просто хранит информацию о записи. Он открывается как окно на существующей странице, однако я бы хотел, чтобы окно открывалось с простой анимацией. Я пытаюсь открыть окно с расширяющейся анимацией вместо окна, которое только появляется.

Ниже приведен код, над которым я работал.

<UserControl Name="RecordViewerUserControl" 
            xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
            x:Class="VisionWare.MasterDataServices.Silverlight.UI.Common.RecordViewer"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
            xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
            xmlns:conv="clr-namespace:VisionWare.MasterDataServices.Silverlight.UI.Converters"
            xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
            mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"

            Height="490"
            Width="600"
            Margin="0,0,0,0">





<UserControl.Resources>
    <conv:DateConverter x:Key="dateConverter" />
    <conv:BoolToVisibilityConverter x:Key="visibilityConverter" />
    <conv:EntityIdToUrlConverter x:Key="urlConverter"/>
    <conv:FileConverter x:Key="fileConverter"/>
    <conv:AlertImageURLConverter x:Key="alertConverter"/>

    <Style TargetType="UserControl" x:Key="CustomUserControlStyle">
        <Setter Property="Effect">
            <Setter.Value>
    <BeginStoryboard>
        <Storyboard>
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="(RenderTransform).(Children)[0].ScaleX">
                <SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1" />
                <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="1.05" />
                <SplineDoubleKeyFrame KeyTime="00:00:00.45" Value="0" />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames BeginTime="0" Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="(RenderTransform).(Children)[0].ScaleY">
                <SplineDoubleKeyFrame KeyTime="00:00:00.2" Value="1" />
                <SplineDoubleKeyFrame KeyTime="00:00:00.25" Value="1.05" />
                <SplineDoubleKeyFrame KeyTime="00:00:00.45" Value="0" />
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </BeginStoryboard>
            </Setter.Value>
        </Setter>
    </Style>

</UserControl.Resources>

Я изменил свой код в соответствии с советом @jrb ...]

<UserControl.Triggers>
    <EventTrigger RoutedEvent="UserControl.Loaded">
        <EventTrigger.Actions>
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.TargetName="RecordViewerUserControl" Storyboard.TargetProperty="Width" To="600"/>
                    <DoubleAnimation Storyboard.TargetName="RecordViewerUserControl" Storyboard.TargetProperty="Height" To="490"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger.Actions>
    </EventTrigger>
</UserControl.Triggers>

Я вставил это сразу после начального открывающего тега UserControl. Когда приложение запускается, оно больше не жалуется, но, похоже, оно не дает эффекта.

Есть идеи? Я что-то упустил в коде позади?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я думаю, что ваши значения анимации неверны, в конце вы должны иметь значение 1 (размер 100%), а не 0.

Почему вы анимируете на первом дочернем элементе LayoutRoot?Вместо этого вы должны иметь RecordViewerUserControl в качестве цели анимации.

0 голосов
/ 29 ноября 2011

Я предлагаю вам протестировать установку размера пользовательского элемента управления на 1, а затем использовать загруженный триггер события (я думаю) и простую двойную анимацию, чтобы увеличить размер элемента управления.

<EventTrigger RoutedEvent="Loaded">

Это рабочий примерВы можете проверить это в kaxaml.

<Page
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     Width="1"
     Height="1"
     Background="Black">
     <Page.Triggers>
          <EventTrigger RoutedEvent="Loaded">
               <EventTrigger.Actions>
                    <BeginStoryboard>
                         <Storyboard>
                              <DoubleAnimation
                                   Storyboard.TargetProperty="Width"
                                   To="200"/>
                              <DoubleAnimation
                                   Storyboard.TargetProperty="Height"
                                   To="200"/>
                         </Storyboard>
                    </BeginStoryboard>
               </EventTrigger.Actions>
          </EventTrigger>
     </Page.Triggers>
     <Grid>
     </Grid>
</Page>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...