2017-05-19 69 views
2

我有以下的树 主窗口 - >自定义用户控件 - >分组框 - >视框处理定制RoutedEvent在事件触发

我添加了一个自定义路由事件的用户控件,如:

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 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属性更改为另一个(f.e. Loaded),则动画工作正常。

任何人都可以帮助我吗?

回答

3

您正在为UserControl提高event

它不是针对ViewBox提出的。

有两种方法去:

这都需要为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.Raise它:

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

OR

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> 
+0

这有帮助!非常感谢。 –

相关问题