نظرة عامة على نظام الحركة و التوقيت
هذا المقال يصف كيف يستخدم نظام التوقيت حركة Timeline، و فئات Clock لتحريك الخصائص.
المتطلبات الأساسية
لفهم هذا الموضوع يجب أن تتمكن من استخدام حركات WPF لتحريك الخصائص ، كما هو موضح في نظرة عامة حول الحركة. كما تساعد في أن تكون على دراية بالخصائص التبعية ; للحصول على مزيد من المعلومات، راجع نظرة عامة حول خصائص التبعية.
المخطط الزمني و الساعات
نظرة عامة حول الحركة يصف كيف Timeline يمثل جزء من الوقت، والحركة نوع من Timeline التي تنتج قيم الناتج. بنفسها, Timeline، لا تقوم بأي شيء غير مجرد وصف قطعة من الوقت. انه المخطط الزمني التابع لكائن Clock الذي يقوم بالعمل الفعلي. وبالمثل، الحركة لا تقوم فعلياً بتحريك الخصائص: فئة الحركة تصف كيفية حساب قيم الناتج و لكن Clock الذي تم إنشاؤه للحركة هو الذي يشغل ناتج الحركة و يتم تطبيقها إلى الخصائص.
Clock هو نوع خاص من الكائن الذي يحتفظ بالحالة المتعلقة بالتوقيت وقت التشغيل ل Timeline. هو يوفر ثلاث بتات من المعلومات الأساسية لنظام الحركة و التوقيت: CurrentTime ، CurrentProgress و CurrentState Clock يحدد الوقت الحالي الخاص به, التقدم، و الحالة باستخدام سلوكيات التوقيت المبينة ب Timeline الخاص به: Duration و RepeatBehavior و AutoReverse و هكذا.
في معظم الحالات، يتم انشاء Clock تلقائياً للمخطط الزمني الخاص بك. عند التحريك باستخدام Storyboard أو أسلوب BeginAnimation ، يتم إنشاء الساعات تلقائياً للمخططات زمنية الخاصة بك و الحركات و تطبيقهم الخصائص المستهدفة الخاصة بهم. يمكنك أيضاً إنشاء Clock بشكل صريح عن طريق استخدام أسلوب CreateClock ل Timeline الخاص بك. أسلوب MediaTimeline.CreateClock ينشئ ساعة من النوع المناسب ل Timeline حيث يتم استدعائها. إذا كان Timeline يحتوي على مخططات زمنية تابعة فهو ينشئ كائنات Clock لهم أيضاً. كائنات Clock الناتجة يتم ترتيبها في الأشجار التي تطابق بنية شجرة كائنات Timeline حيث تم إنشاؤها.
هناك أنواع مختلفة من الساعات للأنواع المختلفة من المخططات الزمنية. يعرض الجدول التالي أنواع Clock التي تتوافق مع بعض أنواع Timeline المختلفة.
نوع المخطط الزمني |
نوع الساعة |
غرض الساعة |
---|---|---|
الحركة (ترث من AnimationTimeline) |
ينشئ قيم ناتج لخاصية تبعية. |
|
يعالج ملف وسائط. |
||
يجمع و يتحكم في كائنات Clock التابعة الخاصة به |
||
يجمع و يتحكم في كائنات Clock التابعة الخاصة به |
يمكنك تطبيق أي من كائنات AnimationClock التي تنشئها إلي الخصائص التبعية المتوافقة باستخدام أسلوب ApplyAnimationClock.
في سيناريوهات الأداء بشكل كبير مثل تحريك أعداد كبيرة من كائنات متشابهة، إدارة استخدام Clock الخاص بك يمكن أن يوفر مزايا الأداء.
الساعات و مدير الوقت
عند تحريك الكائنات في WPF ،مدير الوقت هو الذي يقوم بإدارة كائنات Clock المنشئة للمخططات الزمنية الخاصة بك. مدير الوقت هو جذر شجرة من كائنات Clock و يتحكم في تدفق الوقت في تلك الشجرة. ينشئ مدير الوقت تلقائياً لكل تطبيق WPF و هو غير مرئي لمطور التطبيق. علامات إدارة الوقت "التجزئة" عدة مرات في الثانية; العدد الفعلي علامات التجزئة التي تحدث في كل ثانية يتنوع استناداً إلى موارد النظام المتوفرة. يحسب مدير الوقت أثناء كل من الدقات حالة كافة كائنات Active Clock في شجرة التوقيت.
يبين الرسم التوضيحي التالي العلاقة بين مدير الوقت، و AnimationClock، و خاصية تبعية متحركة.
تحريك خاصية
عندما يدق مدير الوقت ، فإنه يقوم بتحديث وقت كل Active Clock في التطبيق. إذا كان Clock هو AnimationClock ، فهو يستخدم أسلوب GetCurrentValue من AnimationTimeline من حيث تم إنشاؤه لحساب قيمة الناتج الحالية. AnimationClock توفر AnimationTimeline مع التوقيت المحلي الحالي ، قيمة الإدخال التي عادةً ما تكون هي القيمة الأساسية للخاصية و قيمة الوجهة الافتراضية. عند استرداد القيمة من متحرك بواسطة الخاصية باستخدام أسلوب GetValue أو أسلوب استرجاع القيمة الخاصة به CLR تحصل على ناتج AnimationClock الخاص به.
مجموعات الساعة
وصف القسم السابق كيفية أن هناك أنواع مختلفة من Clock الكائنات لأنواع مختلفة من المخططات الزمنية. يبين الرسم التوضيحي التالي العلاقة بين مدير الوقت و ClockGroup، و AnimationClock, و خاصية تبعية متحركة. ClockGroup يتم إنشائه للمخططات الزمنية التي تجمع مخططات زمنية أخرى مثل فئة Storyboard الذي يجمع الحركات و المخططات الزمنية الأخرى.
ClockGroup
تركيب
يمكن إقران ساعات متعددة مع خاصية مفردة ، في هذه الحالة تستخدم كل ساعة قيمة ناتج الساعة السابقة كالقيمة الأساسية الخاصة به. يبين الرسم التوضيحي التالي كائنات AnimationClock ثلاثة مطبقين لنفس الخاصية. ساعة 1 تستخدم القيمة الأساسية للخاصية المتحركة كأنها الإدخال الخاص بها ثم تستخدمها لإنشاء الناتج. الساعة 2 تأخذ ناتج من الساعة 1 كأنه الإدخال الخاص بها ثم يستخدم لإنشاء الناتج. Clock3 takes the output from Clock2 as its input and uses it to generate output. عندما تؤثر ساعات متعددة على نفس الخاصية في نفس الوقت, فإنها في سلسلة تركيب.
سلسلة التركيب
لاحظ أنه بالرغم من أنه يتم إنشاء علاقة بين الإدخال و الناتج لكائنات AnimationClock في سلسلة التركيب, سلوكيات التوقيت لا تتأثر; كائنات Clock (بما في ذلك كائنات AnimationClock) يحتوي على تبعية ذات تسلسل هرمي على كائنات Clock الأصل.
لتطبيق ساعات متعددة لنفس الخاصية استخدم Compose HandoffBehavior عند تطبيق Storyboard، الحركة ، أو AnimationClock.
الدقات و دمج الأحداث
بالإضافة إلى حساب قيم الناتج، يقوم مدير وقت بعمل أخر كلما مرة يدق: هو يحدد حالة كل ساعة و يرفع الأحداث بالشكل المناسب.
بينما تحدث الدقات بشكل متكرر, فمن الممكن أن كثير من الأشياء تحدث بين الدقات. على سبيل المثال، Clock قد يتم إيقافه, تشغيله و إيقافه مرة أخرى، في هذه الحالة قيمة CurrentState الخاصة به ستكون تغيرت ثلاث مرات. نظرياً, حدث CurrentStateInvalidated قد يمكن رفعه عدة مرات في الدقة الواحدة; ومع ذلك، يدمج مشغّل التوقيت الأحداث، بحيث حدث CurrentStateInvalidated يمكن رفعه على الأكثر مرة واحدة في كل دقة. وينطبق هذا لكافة الأحداث التوقيت: حدث واحد على الأكثر لكل نوع يتم رفعه لكائن Clock معطى.
عند يبدل Clock الحالات و يرجع مرة أخرى إلي حالته الأصلية بين الدقات (مثل تغيير من Active إلي Stopped ثم يرجع إلي Active) ، لا يزال يتم إجراء الحدث المقترن.
لمزيد من المعلومات حول أحداث التوقيت، راجع نظرة عامة حول أحداث التوقيت.
القيم الحالية و القيم الأساسية للخصائص
الخاصية حيث يمكن تطبيق الحركة يمكن أن يكون لديها قيمتين: قيمة أساسية و قيمة حالية. عند تعيين خاصية باستخدام أسلوب استرجاع القيمة الخاصة به CLR أو أسلوب SetValue، يجب تعيين القيمة الأساسية الخاصة بها. إذا لم تكن الخاصية يمكن أن تحرك، القيمة الأساسية و الحالية هم نفس القيم.
عند تحريك خاصية، AnimationClock يقوم بتعيين القيمة الحالية التابعة إلي الخاصية. استرداد قيمة الخاصية من خلال أسلوب استرجاع القيمة الخاص به CLR أو أسلوب GetValue يقوم بإرجاع ناتج AnimationClock عندما AnimationClock يكون Active أو Filling. يمكنك استرداد القيمة الأساسية للخاصية باستخدام أسلوب GetAnimationBaseValue.