none
Démarrer Storyboard Blend en WPF RRS feed

  • Question

  • Bonjour,

    Je commence dans le développement Visual C# et Blend pour une table surface.

    Je fais une animation simple dans Blend (un rond qui grossi), j'essai de faire apparaître ce rond à l'endroit ou j'appui (çà pas de pb) et lancer l'animation à ce moment là mais çà je n'y arrive, çà doit être un truc du genre begin le storyboard, mais je ne trouve pas le code.

    Voilà mon code :

    Fichier XAML :

    <s:SurfaceWindow xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="http://schemas.microsoft.com/surface/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Name="MySurface" mc:Ignorable="d" x:Class="SurfaceApplication1.SurfaceWindow1"
        Title="SurfaceApplication1"
        >
    	<s:SurfaceWindow.Resources>
    		<Storyboard x:Key="MoveRond">
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="MyEllipse">
    				<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
    				<EasingDoubleKeyFrame KeyTime="0:0:1" Value="2"/>
    			</DoubleAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)" Storyboard.TargetName="MyEllipse">
    				<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
    				<EasingDoubleKeyFrame KeyTime="0:0:1" Value="2"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
    	</s:SurfaceWindow.Resources>
      <Grid x:Name="MainGrid">
      	 	<Canvas x:Name="MyCanvas" HorizontalAlignment="Left" VerticalAlignment="Top" Width="1024" Height="768" Background="Black" TouchDown="MyCanvas_TouchDown">
      	 		<Ellipse x:Name="MyEllipse" Fill="#FF4949F1" Stroke="Black" Width="114" Height="114" Canvas.Left="239.5" Canvas.Top="181.5" RenderTransformOrigin="0.5,0.5" KeyUp="MyEllipse_KeyUp">
      	 			<Ellipse.RenderTransform>
      	 				<TransformGroup>
      	 					<ScaleTransform/>
      	 					<SkewTransform/>
      	 					<RotateTransform/>
      	 					<TranslateTransform/>
      	 				</TransformGroup>
      	 			</Ellipse.RenderTransform>
      	 		</Ellipse>
      	 	</Canvas>
    
      </Grid>
    </s:SurfaceWindow>

    Fichier CS :

    private void MyCanvas_TouchDown(object sender, System.Windows.Input.TouchEventArgs e)
            {
            	// TODO : ajoutez ici l’implémentation du gestionnaire d’événements.
    			e.TouchDevice.Capture(MyCanvas);
    			e.Handled = true;
    			UpdateMyForm();            
            }
    
            	
    		private void UpdateMyForm ()
    		{
    			foreach (TouchDevice device in MyCanvas.GetInputDevicesCaptured())
                {
                    EllipseData data = device.GetEllipseData(MyCanvas);
    
                    Point position = device.GetCenterPosition(this);
    
                    if ( (data.MinorAxis > 60) & (data.MajorAxis < 140))
                    {
                        Canvas.SetLeft(MyEllipse, position.X + (data.MajorAxis / 2));
                        Canvas.SetTop(MyEllipse, position.Y - (data.MajorAxis / 2));
                                      
                    }
    			}
    		}

    Merci de votre aide

    lundi 23 juillet 2012 14:27

Réponses

  • Vous pouvez récupérer une référence à votre storyboard via les resources de votre SurfaceWindow :

    var sb = (Storyboard) mySurfaceWindows.Resources["MoveRond"];

    Puis un sb.Begin


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 25 juillet 2012 07:51

Toutes les réponses

  • Vous pouvez récupérer une référence à votre storyboard via les resources de votre SurfaceWindow :

    var sb = (Storyboard) mySurfaceWindows.Resources["MoveRond"];

    Puis un sb.Begin


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 25 juillet 2012 07:51
  • Tout d'abord merci de votre réponse.

    voilà ce que j'ai fait 

     private void MyCanvas_TouchDown(object sender, System.Windows.Input.TouchEventArgs e)
            {
            	// TODO : ajoutez ici l’implémentation du gestionnaire d’événements.
    			e.TouchDevice.Capture(MyCanvas);
    			e.Handled = true;
    			UpdateMyForm();
    			MyEllipse.Visibility = Visibility.Visible;
                var sb = (Storyboard)MySurface.Resources["MoveRond"];
                sb.Begin;
                
            }

    J'ai l'erreur suivante :

    Erreur 1 Seuls une assignation, un appel, un incrément, un décrément et des expressions d'objet new peuvent être utilisés comme instruction C:\Users\Arnaud\documents\visual studio 2010\Projects\SurfaceApplication6\SurfaceApplication6\SurfaceWindow1.xaml.cs 119 13 SurfaceApplication6

    J'ai trop de mal.

    Merci de votre  aide.

    mercredi 25 juillet 2012 13:11
  • C'est ok, j'ai trouvé.

    Encore Merci

    mercredi 25 juillet 2012 13:48
  • Cool

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 25 juillet 2012 13:56