PDA

View Full Version : نوشتن storyboard براي يك Viewport3D



m110_110
جمعه 14 مرداد 1390, 13:27 عصر
با سلام
من يك storyboard خاص يك Viewport3D نوشتم اما مي خواهم اون رو در قالب يك استايل براي هرچند Viewport3D كه مي خواهم استفاده كنم
اما نتونستم اين كار رو انجام بدم
خواهش مي كنم در اين مورد راهنماييم كنيد
كد:



<Viewport3D x:Name="V3d_1" HorizontalAlignment="Right" Width="270" Height="200" VerticalAlignment="Top">
<Viewport3D.Camera>
<PerspectiveCamera Position="0, 0, 4"/>
</Viewport3D.Camera>
<Viewport2DVisual3D >
<Viewport2DVisual3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="uiRotate" Angle="0" Axis="0.3, 1, 0" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Viewport2DVisual3D.Transform>

و كد storyboard:


<Storyboard x:Key="uiSpin" x:Name="uiSpin">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:2"
Storyboard.TargetName="uiRotate" Storyboard.TargetProperty="Angle">
<LinearDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<LinearDoubleKeyFrame KeyTime="0:0:1" Value="-80"/>
<LinearDoubleKeyFrame KeyTime="0:0:2" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>

رضا عربلو
شنبه 15 مرداد 1390, 14:38 عصر
با اطلاعاتي که شما قرار داديد نحوه استفاده از storyboard بصورت زير مي باشد.

<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Viewport3D >
<Viewport3D.Resources>
<Storyboard x:Key="uiSpin" x:Name="uiSpin">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:2">
<LinearDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<LinearDoubleKeyFrame KeyTime="0:0:1" Value="-80"/>
<LinearDoubleKeyFrame KeyTime="0:0:2" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Viewport3D.Resources>
<Viewport3D.Camera>
<PerspectiveCamera Position="0, 0, 4"/>
</Viewport3D.Camera>
<Viewport2DVisual3D >
<Viewport2DVisual3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="uiRotate" Angle="0" Axis="0.3, 1, 0" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Viewport2DVisual3D.Transform>
</Viewport2DVisual3D>
<Viewport3D.Triggers>
<EventTrigger RoutedEvent="Viewport3D.Loaded">
<BeginStoryboard Storyboard ="{StaticResource uiSpin}" Storyboard.TargetName ="uiRotate" Storyboard.TargetProperty="Angle"/>
</EventTrigger>
</Viewport3D.Triggers>
</Viewport3D>
</Window>

m110_110
یک شنبه 16 مرداد 1390, 17:03 عصر
سلام
ممنون از جوابتون اما مثل اينكه من درست نتوانستم منظورم رو برسونم
من مي خوام يك استايل بنويسم كه همين كار رو بكنه ولي در يك رويداد ديگر(مثل كليك كردن روي چيزي) . با اين قسمت مشكلي ندارم (رويدادي كه مي خواد storyboard رو صدا كنه)
مشكل خود storyboard هست كه نمي دونم چگونه در app.xaml معرفي كنم كه مثلا به 5 تا Viewport3D به عنوان استايل بدهم تا مثلا با كليك بر روي هر كدام اين عمل صورت گيرد
كمي جستجو كردم ديدم نبايد نام element رو ببرم و بايد property رو مثلا به شكل زير معرفي كنم


Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[2].(RotateTransform.Angle)"

ولي مشكل اينجاست كه نتونستم براي Angle در Viewport3D اين طوري درست كنم
لطفا راهنمايي فرماييد
ممنون

m110_110
دوشنبه 17 مرداد 1390, 23:36 عصر
سلام
از مديران خواهش مي كنم كمي كمك كنند

رضا عربلو
سه شنبه 18 مرداد 1390, 11:20 صبح
در app.xaml بنويس

<Application.Resources>
<Storyboard x:Key="uiSpin" x:Name="uiSpin">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:2">
<LinearDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
<LinearDoubleKeyFrame KeyTime="0:0:1" Value="-80"/>
<LinearDoubleKeyFrame KeyTime="0:0:2" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Application.Resources>


حالا براي استفاده از اون بنويس

<BeginStoryboard Storyboard ="{DynamicResource uiSpin}" Storyboard.TargetName ="uiRotate" Storyboard.TargetProperty="Angle"/>

مهدی فرزاد
سه شنبه 18 مرداد 1390, 11:28 صبح
سلام
شما میتونید برای کنترل مورد نظر در ریسورس دیکشنری استایل تعریف کنید بعد این Storyboard رو برای اون استایل بسازید( بر اساس اون استایل) و هر کنترلی که این استایل رو داشته باشه خود به خود از این انیمیشن پیروی میکنه

m110_110
سه شنبه 18 مرداد 1390, 21:57 عصر
سلام


شما میتونید برای کنترل مورد نظر در ریسورس دیکشنری استایل تعریف کنید بعد این Storyboard رو برای اون استایل بسازید( بر اساس اون استایل) و هر کنترلی که این استایل رو داشته باشه خود به خود از این انیمیشن پیروی میکنه

خوب من دقيقا همين رو مي خوام ولي مشكل اينجاست كه نمي دونم براي اين موضوع چطور بنويسم
ممنون

مهدی فرزاد
چهارشنبه 19 مرداد 1390, 10:15 صبح
http://barnamenevis.org/showthread.php?255474-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-WPF-%28%D9%85%D8%AA%D9%88%D8%B3%D8%B7-%D8%AA%D8%A7-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87%29&p=1155492&viewfull=1#post1155492

m110_110
چهارشنبه 19 مرداد 1390, 18:11 عصر
سلام
منظورم اين نيست كه نمي تونم ریسورس دیکشنری درست كنم ؛ منظورم من اين هست كه من براي اين موضوع خاص يعني چرخش در Viewport3D مي خواهم يك استايل درست كنم كه مثلا 5 تا Viewport3D اين استايل را داشته باشند. همانطور كه در قسمت اول مي بينيد يك storyboard براي يك عدد Viewport3D خاص دارم كه مي خواهم اون رو به استايلي تبديل كنم كه بتوان به هر 5 تا Viewport3D بدهم. اما مشكل در تعريف قسمت Storyboard.TargetProperty است كه نمي دانم اون رو چطوري بنويسم
البته نمونه هايي از اين رو ديدم ولي براي Angle يك Viewport3D نتونستم بنويسم مثل:

Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Childr en)[2].(RotateTransform.Angle)"
كه چرخش ساده يك المنت هست ولي براي Angle يك Viewport3D نتونستم اين گونه بنويسم
راستي هر چند چيزي كه مي خوام كد اقاي رضا عربلو نيست اما ان هم كار نكرد
ممنون

m110_110
جمعه 21 مرداد 1390, 19:17 عصر
سلام
اخرش جواب سوالم رو پيدا كردم

كد:


<Style x:Key="V3D" TargetType="Viewport3D">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseLeftButtonDown">
<BeginStoryboard>
<Storyboard>
<Rotation3DAnimationUsingKeyFrames BeginTime="0:0:1" Storyboard.TargetProperty="(Viewport3D.Children)[0].(Viewport2DVisual3D.Transform).(Transform3DGroup. Children)[0].(RotateTransform3D.Rotation)">
<LinearRotation3DKeyFrame KeyTime="0">
<LinearRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="0,1,0" Angle="0"/>
</LinearRotation3DKeyFrame.Value>
</LinearRotation3DKeyFrame>
<LinearRotation3DKeyFrame KeyTime="0:0:0.5">
<LinearRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="0,1,0" Angle="-90"/>
</LinearRotation3DKeyFrame.Value>
</LinearRotation3DKeyFrame>

</Rotation3DAnimationUsingKeyFrames>
.
.
.