繁体   English   中英

在事件触发器中处理自定义RoutedEvent

[英]Handle Custom RoutedEvent in Event Trigger

我有以下树MainWindow-> Custom UserControl-> GroupBox-> ViewBox

我已将自定义路由事件添加到UserControl中,如下所示:

  public static readonly RoutedEvent ConnectedEvent =
        EventManager.RegisterRoutedEvent("Connected", RoutingStrategy.Tunnel,
        typeof(RoutedEventHandler), typeof(IQMasterControl));

    public event RoutedEventHandler Connected
    {
        add { AddHandler(IQMasterControl.ConnectedEvent, value); }
        remove { RemoveHandler(IQMasterControl.ConnectedEvent, value); }
    }

该事件的调用如下:

 _masterViewModel.Connected += delegate ()
        {
            RoutedEventArgs ea = new RoutedEventArgs(IQMasterControl.ConnectedEvent, this);
            this.RaiseEvent(ea);
        };

我想使用事件触发器在“已连接”事件的ViewBox上运行一些动画:

<Viewbox VerticalAlignment="Center"
                      Child="{StaticResource PDataIco}"
                      RenderTransformOrigin="0.5, 0.5" Stretch="Uniform">
                        <Viewbox.RenderTransform>
                            <!--  the transform a name tells the framework not to freeze it  -->
                            <RotateTransform x:Name="noFreeze" />
                        </Viewbox.RenderTransform>
                        <Viewbox.Triggers>
                            <EventTrigger RoutedEvent="local:IQMasterControl.Connected">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation RepeatBehavior="Forever" Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:1" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </EventTrigger>
                        </Viewbox.Triggers>
                    </Viewbox>

我检查了事件是否引发,但是ViewBox似乎没有收到事件。 因此,没有动画开始。

如果我将EventTrigger的RoutedEvent属性更改为另一个(已载入),则动画效果很好。

谁可以帮我这个事?

您正在引发UserControl event

它不会为ViewBox引发。

有两种方法:

两者都需要为ViewBox添加名称:

<Viewbox VerticalAlignment="Center" x:Name="ViewBox"
                  Child="{StaticResource PDataIco}"
                  RenderTransformOrigin="0.5, 0.5" Stretch="Uniform">
                    <Viewbox.RenderTransform>
                        <!--  the transform a name tells the framework not to freeze it  -->
                        <RotateTransform x:Name="noFreeze" />
                    </Viewbox.RenderTransform>
                    <Viewbox.Triggers>
                        <EventTrigger RoutedEvent="local:IQMasterControl.Connected">
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation RepeatBehavior="Forever" Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:1" />
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Viewbox.Triggers>
</Viewbox>

1.将其提升为ViewBox

_masterViewModel.Connected += delegate ()
    {
        RoutedEventArgs ea = new RoutedEventArgs(IQMasterControl.ConnectedEvent, this);
        ViewBox.RaiseEvent(ea);
    };

要么

2.在UserControl处理它:

<UserControl.Triggers>
    <EventTrigger RoutedEvent="local:IQMasterControl.Connected">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation RepeatBehavior="Forever" Storyboard.Target="{Binding ElementName=Viewbox}" Storyboard.TargetProperty="(Rectangle.RenderTransform).(RotateTransform.Angle)" To="360" Duration="0:0:1" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</UserControl.Triggers>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM