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;

}

يعمل هذا الأسلوب أيضاً الحركات غير لوحة العمل.

المرجع

FillBehavior

Storyboard..::.Remove

RemoveStoryboard

المبادئ

نظرة عامة حول الحركة

نظرة عامة حول أساليب تحريك الخاصية