2012-01-23 8 views
0

を停止:は、アプリケーションの私のメインウィンドウでWPFのアニメーション、動的なロードされたユーザーコントロール

<UserControl 
x:Class="NotificationWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="Transparent" MouseEnter="UserControl_MouseEnter"> 

<Grid RenderTransformOrigin="0,1"> 

    <Border BorderThickness="1" Background="Beige" BorderBrush="Black" CornerRadius="10"> 
     <StackPanel Margin="20"> 
      <TextBlock TextWrapping="Wrap" Margin="5"> 
     <Bold>Besked fra podio</Bold><LineBreak /><LineBreak /> 
     Her skal der være en podio notification! 
      </TextBlock> 
      <CheckBox Content="Check check" Margin="5 5 0 5" /> 
      <Button Content="Klik på mig" HorizontalAlignment="Center" /> 
     </StackPanel> 
    </Border> 

    <!-- Animation --> 
    <Grid.Triggers> 
     <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
      <BeginStoryboard> 
       <Storyboard x:Name="sbMain"> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"> 
         <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/> 
         <SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/> 
        </DoubleAnimationUsingKeyFrames> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)"> 
         <SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/> 
         <SplineDoubleKeyFrame KeyTime="0:0:4" Value="0"/> 
        </DoubleAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Grid.Triggers> 

    <Grid.RenderTransform> 
     <ScaleTransform ScaleY="1" /> 
    </Grid.RenderTransform> 

</Grid> 

private void UserControl_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { 
sbMain.Stop(); // not working 

public MainWindow() { 
InitializeComponent(); 

Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => { 
    var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 
    var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; 
    var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom)); 

    this.Left = corner.X - this.ActualWidth - 100; 
    this.Top = corner.Y - this.ActualHeight; 
})); 

NotificationWindow nw1 = new NotificationWindow(); 
spNotifiers.Children.Add(nw1); 

}

私の通知は、このようになります

}

私はmouse_anterイベントを持っています。これはアニメーション/ストーリーボードを停止するはずですが、何を試してもアニメーションを止めることはできません。

アイデア?

+0

もう一度BeginAnimationを呼び出し、2番目の引数をnullに設定してください。 – Zaki

+0

と私が聞くことができる場合、最初の引数は何ですか? – danielovich

+0

BeginAnimation((垂直スクロールプロパティ:Horizo​​ntalScrollProperty)、null);ソース:http://viblend.wordpress.com/2011/03/18/tip-stopping-an-animation-in-wpf/ – Zaki

答えて

1

解決策が見つかりましたが、トリガーを削除する必要があります。

ステップ1:「UserControl.Resources」にあなたのアニメーションを入れて、それに属性を与える「X:キー= sbMain」

ステップ2:イベントは

をロードし、ユーザーコントロールに追加するステップ3:変更の背後にあるコードでは " sbMain.Stop(); " "((Storyboard)FindResource(" sbMain "))。Stop();"、ディレクティブを使っていくつか追加しなければならないかもしれません。

ステップ4:LoadEvent add "((Storyboard)FindResource(" sbMain "))。Begin();"

<UserControl x:Class="NotificationWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="Transparent" MouseEnter="UserControl_MouseEnter" Width="300" Height="200" Loaded="UserControl_Loaded"> 
<UserControl .Resources> 
    <Storyboard x:Key="sbMain"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)" Storyboard.TargetName="AnimatedGrid"> 
      <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/> 
      <SplineDoubleKeyFrame KeyTime="0:0:0.5" Value="1"/> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="AnimatedGrid"> 
      <SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/> 
      <SplineDoubleKeyFrame KeyTime="0:0:4" Value="0"/> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</UserControl .Resources> 


<Grid RenderTransformOrigin="0,1" x:Name="AnimatedGrid"> 

    <Border BorderThickness="1" Background="Beige" BorderBrush="Black" CornerRadius="10"> 
     <StackPanel Margin="20"> 
      <TextBlock TextWrapping="Wrap" Margin="5"> 
    <Bold>Besked fra podio</Bold><LineBreak /><LineBreak /> 
    Her skal der være en podio notification! 
      </TextBlock> 
      <CheckBox Content="Check check" Margin="5 5 0 5" /> 
      <Button Content="Klik på mig" HorizontalAlignment="Center" /> 
     </StackPanel> 
    </Border> 

    <Grid.RenderTransform> 
     <ScaleTransform ScaleY="1" /> 
    </Grid.RenderTransform> 

</Grid> 

と背後にあるコードで:

private void UserControl_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    ((Storyboard)FindResource("sbMain")).Stop(); 
} 

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
{ 
     ((Storyboard)FindResource("sbMain")).Begin(); 
} 

このコードは、私の場合で働いていた

結果は次のようになります。

関連する問題