چه فرقی می کنه؟ فرضا در یک Storyboard مثل اونی که در Style ئه ComboBox هست، "Storyboard.TargetName="Border ئه، کدوم "Border"؟ میتونه ده تا ComboBox در پنجره باشه که یک المنت "Border" دارن. TargetName که منحصر بفرد نیست، ممکنه چند تا پنجره داشته باشید که هر کدوم یک Button1 داشته باشند. اینکه روی کدوم شون انیمیشن اجرا بشه فرقی نمی کنه؟
سلامی مجدد استاد . خیلی ممنون .
من بگم دقیقا متوجه ی منظورتون نشدم ، دعوام نمیکنین؟
مگه هر شی ای که بهش ، نام ای اختصاص میدیم (چه با پروپرتیِ Name یا با x:Name) ، نباید منحصر به فرد باشه؟
یعنی 2 تا نامِ شبیه هم را نمیشه به دو شی متفاوت اختصاص داد دیگه . درسته؟ (وگرنه xaml در wpf خطا میده) .
پس Storyboard.TargetName ای که برای هر شی ست میکنیم ، جدا از هم میشن دیگه .
از جواب بقیه ی قسمت ها هم ممنون .
----------------------------------------------------------------------------
استاد ، در لینک زیر :
Key-Frame Animations Overview - WPF
قضیه ی نمودار Key Frame Animation ، این طوری هست که در زیر توضیح میدم؟ :
در اون شکل اولی که در لینک بالا رسم کرد ، اگه کد زیر را باشه :
کد:
<Border Name="border6AnimKeyFrameWidth" Margin="10,360,0,0" Width="100" Height="100" Background="#FF4D8B56" HorizontalAlignment="Left" VerticalAlignment="Top">
<Border.Child>
<TextBlock Foreground="White" FontSize="18" IsHitTestVisible="False" Text="Click For KeyFrame Width Animation" TextWrapping="Wrap" />
</Border.Child>
<Border.Triggers>
<EventTrigger RoutedEvent="UIElement.MouseDown">
<EventTrigger.Actions>
<BeginStoryboard>
<BeginStoryboard.Storyboard>
<Storyboard
Storyboard.TargetName="border6AnimKeyFrameWidth"
Storyboard.TargetProperty="Width"
FillBehavior="Stop">
<Storyboard.Children>
<DoubleAnimationUsingKeyFrames Duration="0:0:10">
<DoubleAnimationUsingKeyFrames.KeyFrames>
<LinearDoubleKeyFrame x:Name="firstKeyFrame" KeyTime="0:0:0" Value="100"/>
<SplineDoubleKeyFrame x:Name="secondKeyFrame" KeyTime="0:0:10" Value="500" KeySpline="0,1 1,0"/>
</DoubleAnimationUsingKeyFrames.KeyFrames>
</DoubleAnimationUsingKeyFrames>
</Storyboard.Children>
</Storyboard>
</BeginStoryboard.Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Border.Triggers>
</Border>
اون شکل ، بصورت زیر میشه؟ :
اول اینکه هر وقت زمانی که در key frame ها مشخص کردیم ، به اون زمان برسه ، خودِ همون نوعِ key frame ای که مشخص کرده بودیم ، اجرا نمیشه . بلکه key frame ئه بعدی اش اجرا میشه . مثلا در کد بالا ، وقتی ثانیه ی 0 ام شروع شد ، اون کیفریم با نامِ firstKeyFrame که مشخص کرده بودیم ، اجرا نمیشه بلکه متد و روشِ کیفریمِ بعدیش که نامِ secondKeyFrame داره ، اجرا میشه .
بنابراین در هر نوع کیفریم ای ، برای لحظه ی ثانیه ی 0 ام ، چه کیفریم ای تعیین کنیم یا نکنیم ، روشِ کیفریمِ بعدی اجرا میشه (یعنی در کد بالا ، از لحظه ی 0 تا 10 ثانیه ، به روشِ secondKeyFrame پیش میره) .
بعد اینکه اون کیفریم (در اینجا ، secondKeyFrame) ، از مقدار زمانِ کیفریمِ قبلی (در مثال ، زمان 0) شروع میشه تا مقدارِ زمانی که در همین کیفریم خودش مشخص میشه (در مثال ، زمان 10 ثانیه) ختم میشه و همچنین از مقداری که برای اون پروپرتی در کیفریمِ قبلی مشخص کرده بودیم (Target Value در firstKeyFrame که همون 100 هست) شروع میشه تا مقداری که برای اون پروپرتی در کیفریمِ خودش مشخص کرده بودیم (Target Value در secondKeyFrame که همون 500 هست) ، ختم میشه .
و همچنین در نمودار ، محور پایین (محور X در ریاضی) ، همون مقدارِ Time ما میشه و محور بالایی (محور Y در ریاضی) ، همون مقدارِ Target Value (در اینجا پروپرتیِ Width هست) میشه .
بنابراین ، هر چقدر که زمان (همون محور X در بالا) ، جلو میره ، به همون نسبتی که در نمودار مشخص هست ، مقدار Width ما هم تغییر میکنه .
یعنی در لحظه ی 0 ، مقدار Width ئه ما ، 100 هست .
در ثانیه ی 1 ، مقدار Width ئه ما تقریبا 260 هست .
در ثانیه ی 2 ، مقدار Width ئه ما تقریبا 290 هست .
در ثانیه ی 3 تا 6 ، مقدار Width ئه ما تقریبا 300 هست (ثابت هست) .
در ثانیه ی 7 ، مقدار Width ئه ما تقریبا 310 هست .
در ثانیه ی 8 ، مقدار Width ئه ما تقریبا 320 هست .
در ثانیه ی 9 ، مقدار Width ئه ما تقریبا 345 هست .
در ثانیه ی 10 ، مقدار Width ئه ما تقریبا 500 هست .
اینها درستن؟
-------------------------------------------------------------------------
اما من قضیه ی Path Animation را متوجه نشدم .
در واقع ، نمودارش را متوجه نشدم چجوری از آب درمیاد؟
یعنی الان اگه بخوایم مثال زیر را بصورت نمودار رسم کنیم ، محور X ها چه چیزی میشه (مثلا در مثال بالا ، محور X ها Time شد) و محور Y ها هم چی میشه (مثلا در مثال بالا ، محور Y ها ، Target Value شد) ؟
بعد مقادیرِ این محورها از چه مقداری تا چه مقداری میشن؟ :
کد:
<Border Name="border5AnimPathWidth" Margin="520,240,0,0" Width="100" Height="100" Background="#FFF19A00" HorizontalAlignment="Left" VerticalAlignment="Top">
<Border.Child>
<TextBlock Foreground="White" FontSize="18" IsHitTestVisible="False" Text="Click For Path KeyFrame Width Animation" TextWrapping="Wrap" />
</Border.Child>
<Border.Triggers>
<EventTrigger RoutedEvent="UIElement.MouseDown">
<EventTrigger.Actions>
<BeginStoryboard>
<BeginStoryboard.Storyboard>
<Storyboard
Storyboard.TargetName="border5AnimPathWidth"
Storyboard.TargetProperty="Width"
FillBehavior="Stop">
<Storyboard.Children>
<DoubleAnimationUsingPath Duration="0:0:5">
<DoubleAnimationUsingPath.PathGeometry>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="0,50" >
<PathFigure.Segments>
<ArcSegment Point="400, 50" Size="1,10" SweepDirection="Clockwise"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</DoubleAnimationUsingPath.PathGeometry>
</DoubleAnimationUsingPath>
</Storyboard.Children>
</Storyboard>
</BeginStoryboard.Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Border.Triggers>
</Border>
من فکر کنم این بار (در قضیه ی Path Animation ها) بر عکس بشه ، یعنی محور Y ها ، Time مون بشه و مقدارِ Target Value مون هم همون محور X ها هست . درسته؟
اما مقدار شروع را دقیقا نمیدونم از کجا بیاد ولی زمان ، از 0 شروع و تا 5 (ثانیه) ختم بشه (یعنی حداکثرِ مقدار محور Y ها ، 5 هست) و مقدار Target Value مون هم از 0 شروع و تا X ئه Point ای که در ArcSegment تعیین کردیم ، یعنی تا مقدار 400 ختم بشه . درسته؟
مقادیر شروعش را یه کم گیج شدم از کجا اومد . کلا توی قضیه ی Path Animation ، دقیق نمیدونم کدوم محور برای چیه و مقادیر شروع و پایانش از کجا میاد؟
تشکر استاد .