PDA

View Full Version : سوال: کار نکردن Storyboard



m110_110
جمعه 11 آذر 1390, 16:11 عصر
با سلام
می بخشید ولی خوب هر کار کردم و هرچی جستجو می کنم ولی باز کارم راه نمی افته
من قصدم اینه که یک Storyboard بنویسم و برای چند تا Viewport3D استفاده کنم اما به مشکل خوردم و Storyboard اجرا نمیشه و دیگر نمی دونم چکار کنم . چون می خوام این Storyboard را برای چند Elemnt استفاده کنم پس نمی تونم نام یک Elemnt رو به عنوان SorceName بیارم
راستی چند جور این کد رو عوض کردم ولی باز جوابم رو نگرفتم
این هم کد:



<Window x:Class="test2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="478" Width="357">
<Window.Resources>
<Style x:Key="V3D" TargetType="Viewport3D">
<Style.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<Rotation3DAnimationUsingKeyFrames BeginTime="0:0:0" Storyboard.TargetProperty="(Viewport3D.Children)[0].(Viewport2DVisual3D.Transform).(Transform3DGroup. Children)[0].(RotateTransform3D.Rotation)">
<LinearRotation3DKeyFrame KeyTime="0:0:0">
<LinearRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="1,0,0" Angle="50"/>
</LinearRotation3DKeyFrame.Value>
</LinearRotation3DKeyFrame>
<LinearRotation3DKeyFrame KeyTime="0:0:1">
<LinearRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="1,0,0" Angle="-40"/>
</LinearRotation3DKeyFrame.Value>
</LinearRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<StackPanel>
<Viewport3D x:Name="St1" Height="40" Style="{StaticResource V3D}">
<Viewport3D.Camera>
<PerspectiveCamera Position="0, 0.75, 4" />
</Viewport3D.Camera>
<Viewport2DVisual3D>
<Viewport2DVisual3D.Geometry>
<MeshGeometry3D Positions="-1,-1,0 1,-1,0 1,1,0 -1,1,0" TriangleIndices="0,1,2 2,3,0" TextureCoordinates="0,1 1,1 1,0 0,0" />
</Viewport2DVisual3D.Geometry>
<Viewport2DVisual3D.Material>
<DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True"/>
</Viewport2DVisual3D.Material>
<Viewport2DVisual3D.Visual>
<Border BorderBrush="White" BorderThickness="1">
<StackPanel Margin="0 0 0 100">
<Button Margin="3" Width="150">Click Me</Button>
</StackPanel>
</Border>
</Viewport2DVisual3D.Visual>
<Viewport2DVisual3D.Transform>
<Transform3DGroup>
<TranslateTransform3D OffsetZ="0" OffsetX="0" OffsetY="0"/>
<ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1,0,0" Angle="0"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</Viewport2DVisual3D.Transform>
</Viewport2DVisual3D>
<!-- Lights -->
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFFFF" Direction="0,0,-1"/>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</StackPanel>
</Grid>
</Window>

مهدی فرزاد
شنبه 12 آذر 1390, 09:15 صبح
سلام

شما میتونید یک استایل برای Element خودتون درست کنید و درون اون استایل StoryBoard رو بر استایل اعمال کنید
حالا هر کدوم از Element ها که اون استایل رو داشته باشه اون انیمیشن رو اجرا میکنه

اگر نتیجه نگرفتید یک نمونه از StoryBoard رو در یک فایل پیوست کنید تا بررسی بشه

m110_110
شنبه 12 آذر 1390, 12:20 عصر
با سلام
با تشكر از جوابتون
در همان پست اول يك نمونه گذاشتم
ممنون ميشم جواب بدهيد

مهدی فرزاد
یک شنبه 13 آذر 1390, 08:21 صبح
سلام

کد StroryBoard شما باید به این شکل باشه نمونه زیر رو ببینید
<Window.Resources>

<Storyboard x:Key="Storyboard1">
<Rotation3DAnimationUsingKeyFrames Storyboard.TargetProperty="(Visual3D.Transform).(Transform3DGroup.Children)[2].(RotateTransform3D.Rotation)" Storyboard.TargetName="viewport2DVisual3D">
<EasingRotation3DKeyFrame KeyTime="0:0:0">
<EasingRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="1,0,0" Angle="50"/>
</EasingRotation3DKeyFrame.Value>
</EasingRotation3DKeyFrame>
<EasingRotation3DKeyFrame KeyTime="0:0:1">
<EasingRotation3DKeyFrame.Value>
<AxisAngleRotation3D Axis="1,0,0" Angle="-40"/>
</EasingRotation3DKeyFrame.Value>
</EasingRotation3DKeyFrame>
</Rotation3DAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource Storyboard1}"/>
</EventTrigger>
</Window.Triggers>

اون حالتی که گفتم استایل تعریف کن برای این مورد جواب نمیده
باید برای هر Viewport2DVisual3D جدا گونه تعریف کنی

m110_110
یک شنبه 13 آذر 1390, 12:34 عصر
با سلام
ممنون از جوابتون ولي اين راه خوبي به نظر نمياد
به طور مثال اگر من بخواهم از درون كد هر چند element كه مي خوام رو generate كنم اون موقع دردسر زا ميشه
ايا كار ديگري نمي توان كرد؟

مهدی فرزاد
یک شنبه 13 آذر 1390, 12:44 عصر
اگه همه هم زمان با هم انیمیشن رو باید اجرا کنن ، همه رو توی یک پنل قرار بدید و پنل رو توی Viewport2DVisual3D و انیمیشن رو روی اون اجرا کنید
ولی اگر هر Element باید یک Viewport2DVisual3D جدا داشته باشه نمیشه
برای این نوع انیمیشن چون روی viewport2DVisual3D اجرا میشه نمیتونی استایل داشته باشی

راه دوم ساخت انیمیشن با کد نویسی C# یا VB هست در حقیقت یک متد درست میکنید که انیمیشن رو توی اون نوشتی و این متد Viewport2DVisual3D رو به عنوان ورودی میگیره و انیمیشن رو روی اون اجرا میکنه