WPF ـ تعيين خاصية بعد تحريكها بلوحة العمل ـ
< هذه مقاطع من مواضيع أعجبتني من مكتبة تعليمات فيجوال ستوديو 2010, أرجو أن تنال إعجابكم. المقالة الأساسية موجودة هنا>
في بعض الحالات، أنه قد يظهر أنك لا تستطيع تغيير القيمة الخاصية بعد قد تم تحريكها.
مثال
في المثال التالي Storyboard يُستخدم لتحريك اللون SolidColorBrush. يتم تشغيل القصة المصورة عند النقر على زر. Completed يتم التعامل مع الحدث بحيث يتم إعلامك البرنامج عند ColorAnimation إكمال.
XAML
<Button
Content="Animate and Then Set Example 1">
<Button.Background>
<SolidColorBrush x:Name="Button1BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Button1BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="HoldEnd"
Completed="setButton1BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
بعد ColorAnimationاكتمال برنامج محاولات لتغيير لون الفرشاة إلى اللون الأزرق.
Visual Basic
Private Sub setButton1BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' Does not appear to have any effect:
' the brush remains yellow.
Button1BackgroundBrush.Color = Colors.Blue
End Sub
#C
private void setButton1BackgroundBrushColor(object sender, EventArgs e)
{
// Does not appear to have any effect:
// the brush remains yellow.
Button1BackgroundBrush.Color = Colors.Blue;
}
رمز السابقة لا يبدو أن تفعل شيئا : يبقى الفرشاة أصفر ، وهو القيمة التي تم توفيره من قبل ColorAnimation متحرك الفرشاة. يتم تغيير قيمة الخاصية الأساسية (القيمة الأساس) فعليا إلى اللون الأزرق. ومع ذلك، يبقى فعالة أو الحالية، أو القيمة الأصفر لأن ColorAnimation لا يزال يتم تجاوز قيمة الأساسي. إذا كنت تريد أن القيمة الأساسية لتصبح قيمة فعالة مرة أخرى ، يجب إيقاف الحركة من التأثير على الخاصية. توجد ثلاث طرق للقيام بذلك صواب storyboard الحركات:هناك ثلاث
قم بتعيين خاصية FillBehavior التابعة لعنصر تحكم إلى Stop.
إزالة القصة المصورة بأكملها.
إزالة الحركة من الخاصية الفردية .
مجموعة الحركة العقارية في سلوك التعبئة من أجل وقف
بواسطة تعيين FillBehavior إلى Stop ، معرفة الحركة إلى توقف التأثير على الخاصية الهدف الخاصة به بعد الوصول إلى نهاية به نشطة فترة.
XAML
<Button
Content="Animate and Then Set Example 2">
<Button.Background>
<SolidColorBrush x:Name="Button2BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Button2BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="Stop"
Completed="setButton2BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
Visual Basic
Private Sub setButton2BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' This appears to work:
' the brush changes to blue.
Button2BackgroundBrush.Color = Colors.Blue
End Sub
#C
private void setButton2BackgroundBrushColor(object sender, EventArgs e)
{
// This appears to work:
// the brush changes to blue.
Button2BackgroundBrush.Color = Colors.Blue;
}
إزالة القصة المصورة بأكملها .
باستخدام RemoveStoryboard المشغّل أو Storyboard..::.Remove الأسلوب ، كنت أقول لوقف الرسوم المتحركة القصة المصورة التي تؤثر على خصائص المستهدفة. الفرق بين هذا الأسلوب وتعيين FillBehavior خاصية يتم إزالة لوحة العمل في أي وقت, بينما FillBehavior خاصية يتضمن تأثير فقط عندما يصل الحركة إلى نهاية به نشطة فترة.
XAML
<Button
Name="Button3"
Content="Animate and Then Set Example 3">
<Button.Background>
<SolidColorBrush x:Name="Button3BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard Name="MyBeginStoryboard">
<Storyboard x:Name="MyStoryboard">
<ColorAnimation
Storyboard.TargetName="Button3BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="HoldEnd"
Completed="setButton3BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
Visual Basic
Private Sub setButton3BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' This appears to work:
' the brush changes to blue.
MyStoryboard.Remove(Button3)
Button3BackgroundBrush.Color = Colors.Blue
End Sub
#C
private void setButton3BackgroundBrushColor(object sender, EventArgs e)
{
// This appears to work:
// the brush changes to blue.
MyStoryboard.Remove(Button3);
Button3BackgroundBrush.Color = Colors.Blue;
}
إزالة للرسوم المتحركة من الخاصية الفردية
تقنية أخرى لإيقاف حركة من التأثير على صواب هي استخدام BeginAnimation(DependencyProperty, AnimationTimeline) أسلوب للكائن الجاري متحرك. تحديد الخاصية التى يتم تحريكها كمعلمة الأولى و null كـالثانية.
XAML
<Button
Name="Button4"
Content="Animate and Then Set Example 4">
<Button.Background>
<SolidColorBrush x:Name="Button4BackgroundBrush"
Color="Red" />
</Button.Background>
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Button4BackgroundBrush"
Storyboard.TargetProperty="Color"
From="Red" To="Yellow" Duration="0:0:5"
FillBehavior="HoldEnd"
Completed="setButton4BackgroundBrushColor" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
Visual Basic
Private Sub setButton4BackgroundBrushColor(ByVal sender As Object, ByVal e As EventArgs)
' This appears to work:
' the brush changes to blue.
Button4BackgroundBrush.BeginAnimation(SolidColorBrush.ColorProperty, Nothing)
Button4BackgroundBrush.Color = Colors.Blue
End Sub
#C
private void setButton4BackgroundBrushColor(object sender, EventArgs e)
{
// This appears to work:
// the brush changes to blue.
Button4BackgroundBrush.BeginAnimation(SolidColorBrush.ColorProperty, null);
Button4BackgroundBrush.Color = Colors.Blue;
}
يعمل هذا الأسلوب أيضاً الحركات غير لوحة العمل.
المرجع
المبادئ
نظرة عامة حول أساليب تحريك الخاصية
Comments
Anonymous
March 24, 2011
Hi there you wrote entire post in Arabic...i can understand.. Can you plz provide some englishAnonymous
March 28, 2011
Hi Owais, thanks for your interest, this is a translated MSDN article. The original article is available at msdn.microsoft.com/.../aa970493.aspx