Aiutami a plz. Ho bisogno di animare la rotazione del pulsante sull'asse z senza usare le librerie esterne, solo con C# e il codice xaml.Tasto rotante WPF
È possibile? Come lo posso fare?
Grazie.
Aiutami a plz. Ho bisogno di animare la rotazione del pulsante sull'asse z senza usare le librerie esterne, solo con C# e il codice xaml.Tasto rotante WPF
È possibile? Come lo posso fare?
Grazie.
Dai un'occhiata alla Viewport2DVisual3D
L'esempio nel collegamento fa esattamente questo.
Edit: Ecco l'esempio dal collegamento con un'animazione aggiunto del asse Z
assomiglia a questo
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="0, 0, 4"/>
</Viewport3D.Camera>
<Viewport2DVisual3D x:Name="v2dv3d">
<Viewport2DVisual3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Angle="0" Axis="0, 1, 0" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Viewport2DVisual3D.Transform>
<Viewport2DVisual3D.Geometry>
<MeshGeometry3D Positions="-1,1,0 -1,-1,0 1,-1,0 1,1,0"
TextureCoordinates="0,0 0,1 1,1 1,0" TriangleIndices="0 1 2 0 2 3"/>
</Viewport2DVisual3D.Geometry>
<Viewport2DVisual3D.Material>
<DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="White"/>
</Viewport2DVisual3D.Material>
<Button Content="Hello, 3D">
<Button.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever">
<Rotation3DAnimation Storyboard.TargetName="v2dv3d"
Storyboard.TargetProperty="(Viewport2DVisual3D.Transform).(RotateTransform3D.Rotation)"
Duration="0:0:2"
BeginTime="0:0:0">
<Rotation3DAnimation.From>
<AxisAngleRotation3D Angle="0" Axis="0, 1, 0" />
</Rotation3DAnimation.From>
<Rotation3DAnimation.To>
<AxisAngleRotation3D Angle="90" Axis="0, 1, 0" />
</Rotation3DAnimation.To>
</Rotation3DAnimation>
<Rotation3DAnimation Storyboard.TargetName="v2dv3d"
Storyboard.TargetProperty="(Viewport2DVisual3D.Transform).(RotateTransform3D.Rotation)"
Duration="0:0:2"
BeginTime="0:0:2">
<Rotation3DAnimation.From>
<AxisAngleRotation3D Angle="-90" Axis="0, 1, 0" />
</Rotation3DAnimation.From>
<Rotation3DAnimation.To>
<AxisAngleRotation3D Angle="0" Axis="0, 1, 0" />
</Rotation3DAnimation.To>
</Rotation3DAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
</Viewport2DVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
trasformazioni possono aiutare in questo caso. Guarda here se questo ti aiuta.
La classe RotateTransform viene utilizzata per ruotare un oggetto WPF in un piano X-Y . Può essere applicato tramite XAML o direttamente tramite codice imperativo.
Se è sufficiente ruotare il pulsante sull'asse Z, non è necessaria alcuna grafica 3D. Tutti gli elementi utente (come i pulsanti) hanno la proprietà RenderTransform, che consente la trasformazione di base del loro aspetto predefinito. Tramite Storyboards, WPF consente di animate almost any dependency property. È possibile utilizzare uno storyboard, innescato dal carico, ad animare la proprietà Angolo di un RotateTransform applicata al pulsante:
<Button Width="100" Height="100" Content="Wheeee!">
<Button.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="ButtonRotation" Storyboard.TargetProperty="Angle">
<DoubleAnimation From="0" To="360" Duration="0:0:3" RepeatBehavior="Forever"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
<Button.RenderTransform>
<RotateTransform x:Name="ButtonRotation" CenterX="50" CenterY="50" Angle="45"/>
</Button.RenderTransform>
</Button>
Il Viewport2DVisual3D, come raccomandato da @Meleak, supporta anche l'animazione, ed è divertente da giocare con se hai tempo. Per animare l'esempio MSDN, è necessario aggiungere un nome all'elemento AxisAngleRotation3D e passare per indirizzare l'asse Z:
<AxisAngleRotation3D x:Name="RotateAboutZ" Angle="40" Axis="0, 0, 1" />
Poi, come sopra, innescare uno storyboard per iniziare l'evento Loaded del Viewport3D. In entrambi i casi, se hai bisogno di un maggiore controllo sull'animazione, puoi rendere lo storyboard una risorsa con nome a cui fare riferimento da altri eventi, o persino costruirlo e controllarlo interamente nel codice.
Grazie per la risposta. Non ero preciso Ho bisogno di animare questo processo. – Yevgeniy
@Eugene: aggiornata la mia risposta con un'animazione sull'asse z. Incollalo e provalo :) –
@Meleak Questa è una rotazione dell'asse Y. Se cambi l'asse in Z, puoi anche semplificare lo storyboard, perché il pulsante non si sposterà mai dalla fotocamera. – Kimberly