Как запустить анимацию из одного пользовательского элемента управления из другого? - PullRequest
1 голос
/ 15 апреля 2011

У меня есть приложение, в котором есть главное окно на верхнем уровне с несколькими пользовательскими элементами управления, размещенными внутри него.У меня есть кнопка на одном пользовательском элементе управления, и я хочу запустить анимацию в другом элементе управления.Как это сделать?Я пытался с Blend, но временная шкала не позволяет мне получить доступ к другим UserControls.

Короче говоря, я хочу отобразить UserControl (скажем, X) рядом с моим существующим приложением, которое исчезнет при нажатии кнопки.Нажатие кнопки находится в другом пользовательском элементе управления, скажем, Y, и и UserControl X, и UserControl Y находятся внутри MainWindow.Надеюсь, я ясно дал понять.

1 Ответ

5 голосов
/ 15 апреля 2011

Пример:

<local:TimeBox x:Name="timeBox">
    <local:TimeBox.RenderTransform>
        <TranslateTransform />
    </local:TimeBox.RenderTransform>
</local:TimeBox>

<local:CustomComboBox>
    <local:CustomComboBox.Triggers>
        <EventTrigger RoutedEvent="local:CustomComboBox.ApplyClick">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Storyboard.Target="{x:Reference timeBox}"
                                     Storyboard.TargetProperty="RenderTransform.X"
                                     From="-500" To="0" Duration="0:0:1">
                        <DoubleAnimation.EasingFunction>
                            <ExponentialEase Exponent="5" EasingMode="EaseOut"/>
                        </DoubleAnimation.EasingFunction>
                    </DoubleAnimation>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </local:CustomComboBox.Triggers>
</local:CustomComboBox>

Примечания: 1 - TranslateTransform не может иметь имя, поэтому вам нужно перейти к нему, начиная с UserControl, используя RenderTransform.X 2 - Событие, которое должно вызвать анимацию, должно быть RoutedEvent, вот код для того, что у меня есть:

public static RoutedEvent ApplyClickEvent = EventManager.RegisterRoutedEvent("ApplyClick",
    RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CustomComboBox));
public event RoutedEventHandler ApplyClick
{
    add { AddHandler(ApplyClickEvent, value); }
    remove { RemoveHandler(ApplyClickEvent, value); }
}

//Pipes the event from an internal button.
private void Button_Apply_Click(object sender, RoutedEventArgs e)
{
    RaiseEvent(new RoutedEventArgs(ApplyClickEvent, this));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...