2009-11-06 115 views
0

在我的WPF應用程序中,我有標準Generic.xaml文件,其中包含我的自定義類的樣式,FrostWPF動畫在ControlTemplate中完成事件

我需要找到一種方法來掛接我的自定義Frost類的動畫之一的Completed事件,我不能在運行時執行它,因爲它抱怨我需要將IsFrozen設置爲false,不想做(因爲表現)。

如何將事件連接到控件模板的TargetType?

<Style TargetType="{x:Type Controls:Frost}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Controls:Frost}"> 
        <ControlTemplate.Resources> 
         <Storyboard x:Key="OnEndFrost"> 
          <DoubleAnimation Name="fadeOutFrostAnimation" 
              BeginTime="00:00:00" 
              Duration="00:00:02" 
              Storyboard.TargetName="frostElement" 
              Storyboard.TargetProperty="(UIElement.Opacity)" 
              To="0"> 
          </DoubleAnimation> 
         </Storyboard> 
        </ControlTemplate.Resources> 
        <Grid> 
         <MediaElement x:Name="frostElement" 
            LoadedBehavior="Manual" 
            Width="1172" 
            Height="286.917" 
            Source="{TemplateBinding SourceUri}" 
            ScrubbingEnabled="True"> 
          <MediaElement.Effect> 
           <eff:ChromaKeyAlphaEffect InputColor="#FF0E425E" Tolerance="0.1" /> 
          </MediaElement.Effect> 
         </MediaElement> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <EventTrigger RoutedEvent="Controls:Frost.EndFrost"> 
          <BeginStoryboard x:Name="OnEndFrost_BeginStoryboard" Storyboard="{StaticResource OnEndFrost}"/> 
         </EventTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

「我無法在運行時執行它,因爲它抱怨我需要將IsFrozen設置爲false,我不想這麼做(因爲性能)。」 凍結對象提供更好的性能,所以我不確定你的意思。 – 2009-11-06 03:06:51

+0

凍結的對象不會像內存佔用的內存和線程安全...這也是重要的,糾正我,如果我錯了,當然 – Mark 2009-11-06 04:06:10

+0

這是正確的,但你似乎是說你*不*想要出於性能原因凍結你的物體......?凍結會提高性能,並讓你勾起這個事件。 – 2009-11-06 16:00:13

回答

0

您可以創建自定義動畫並向其中添加事件處理程序或使用命令作爲依賴項屬性。有關自定義動畫的代碼項目示例,請參見this link

+0

我可能必須這樣做,我認爲 – Mark 2009-11-06 22:40:55