EventTrigger RoutedEvent не запускается пользовательским событием

Я пытаюсь запустить раскадровку для воспроизведения, когда запускается пользовательское перенаправленное событие (определенное мной). Событие называется CustomTest и определяется в MyControl.

Хотя событие запускается, триггер не воспроизводит раскадровку.

XAML:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:gear="clr-namespace:GearWPF"
    x:Class="GearWPF.MyControl"
    x:Name="UserControl">

...

    <Grid x:Name="LayoutRoot" Background="#00000000">
        <Grid.Triggers>
            <EventTrigger RoutedEvent="gear:MyControl.CustomTest"> <!-- My custom event. -->
                <BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>

С#:

namespace GearWPF
{
    /// <summary>
    /// Interaction logic for MyControl.xaml
    /// </summary>
    public partial class MyControl: UserControl
    {

        // Create a custom routed event by first registering a RoutedEventID 
        // This event uses the bubbling routing strategy 
        public static readonly RoutedEvent CustomTestEvent = EventManager.RegisterRoutedEvent("CustomTest", RoutingStrategy.Bubbling, typeof(RoutedEventHandler), typeof(MyControl));

        // Provide CLR accessors for the event 
        public event RoutedEventHandler CustomTest
        {
            add { AddHandler(CustomTestEvent, value); }
            remove { RemoveHandler(CustomTestEvent, value); }
        }

        public MyControl()
        {
            this.InitializeComponent();
        }

        public void RaiseMyEvent()
        {
            RoutedEventArgs newEventArgs = new RoutedEventArgs(CustomTestEvent);
            RaiseEvent(newEventArgs);
        }
    }
}

Я проверил, что RaiseMyEvent вызывается, когда я этого ожидаю. И, используя Snoop, я вижу, что событие доходит до моего контроля (где обработано «False»). Однако триггер на самом деле не запускает раскадровку.

Я также изменил триггер, чтобы использовать существующее событие, и когда я это делаю, запускается раскадровка. Это наводит меня на мысль, что это что-то конкретное для моего перенаправленного события CustomTest.

    <Grid x:Name="LayoutRoot" Background="#00000000">
        <Grid.Triggers>
            <EventTrigger RoutedEvent="Mouse.MouseEnter"> <!-- This works! -->
                <BeginStoryboard Storyboard="{StaticResource MyStoryBoard}"/>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>

person Goose    schedule 11.03.2014    source источник


Ответы (1)


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

    public void RaiseMyEvent()
    {
        RoutedEventArgs newEventArgs = new RoutedEventArgs(CustomTestEvent);
        LayoutRoot.RaiseEvent(newEventArgs); // This change fixes the issue.
    }
person Goose    schedule 11.03.2014
comment
У меня есть собственное RoutedEvent в моем MainWindow.xaml.cs, и мой EventTrigger не срабатывает. Ваш ответ помог мне, так как он сидел в моей сетке и был слишком низким, чтобы принять участие в событии! - person metoyou; 01.02.2021