Silverlight пользовательский EventTrigger - PullRequest
0 голосов
/ 27 августа 2011

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

namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            MyEvent += new ChangedEventHandler(UserControl_MyEventHandler);
            /* Other stuff */
        }
        private void UserControl_MyEventHandler(object sender, RoutedEventArgs e)
        {
                MessageBox.Show("MyEventHandler has been called");
        }

        public delegate void ChangedEventHandler(object sender, RoutedEventArgs e);

        private event ChangedEventHandler MyEvent;

        private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
                if (MyEvent != null)
                    MyEvent(this, e);
        }
    }
}

Код XAML выглядит следующим образом:

<UserControl
... 
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" mc:Ignorable="d"
x:Class="SilverlightApplication1.MainPage" MouseLeftButtonDown="UserControl_MouseLeftButtonDown">

    <Grid x:Name="LayoutRoot" Background="White">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MyEvent">
                <ei:GoToStateAction StateName="Highlighted"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        ...
    </Grid>
</UserControl>

Текущий, окно сообщения, содержащее "MouseLeftButtonDown", отображается, но анимация не вызывается. Анимация вызывается, когда EventTrigger EventName было MouseLeftButtonDown вместо MyEvent. Пожалуйста, помогите мне. Спасибо.

1 Ответ

0 голосов
/ 27 августа 2011

Вы можете установить SourceName в EventTrigger, если хотите активировать событие какого-либо элемента управления. Я думаю, в вашем случае в коде позади:

VisualStateManager.GoToState(this [or some other object with Highlighted state], "Highlighted", false);
...