WPF القصة المصورة الزناد على الممتلكات تغيرت

StackOverflow https://stackoverflow.com/questions/626704

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي DataTemplate الذي هو للفئة التي تطبق INotifyPropertyChanged. هل هناك أي طريقة لتحريك القصة المصورة عند تغيير الملكية والقصة المصورة مختلفة على قيم مختلفة (منطقي في هذه الحالة)؟

وهل هناك أي طريقة لتحريك القصة المصورة عند بدء التشغيل اعتمادا على القيم على الطبقة التي يتم إجراؤها على datatemplate عنه؟

هل كانت مفيدة؟

المحلول

نعم، يمكنك أن تفعل ذلك.

وإضافة DataTrigger وربط الملكية الخاصة. وإليك مثال:

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=MyProperty}" Value="True">
        <BeginStoryboard Storyboard="{StaticResource myStoryboard}"/>
    </DataTrigger>
</DataTemplate.Triggers>

ويمكنك تعيين قيمة لاختبار إلى أي شيء تريده. لذلك يمكن أن تعيين القصة المصورة لتبدأ عندما تتغير قيمة لكاذبة. يمكنك إضافة العديد من DataTriggers (أو المشغلات الأخرى) على النحو الذي تريد.

لاحظ أن في بلدي على سبيل المثال I مرجع الملكية وهمية والقصة المصورة.

وعندما يتغير الممتلكات، وسوف يتم تحديث ملزمة وسوف النار على الزناد بسبب ربط البيانات.

وينبغي لهذه التقنية أيضا يعمل عند بدء التشغيل.

نصائح أخرى

وعلى غرار ملصق أعلاه، أود أيضا أن تستخدم لDataTrigger ثم المحتم أن عقار في بلدي ViewModel. وكان الشيء الوحيد لقد وجدت مربكة مكان وضع الزناد البيانات. وضعه مباشرة في عقدة الجذر (أي إطار). أنا خلقت ذلك باستخدام مزيج التعبير الذي اعتنى تفاصيل بطاقة التسمية بالنسبة لي.

وتأكد أيضا أن تدرج في مشروعك إشارة إلى "Microsoft.Expression.Interactions"

وXAML: (هذا ينطبق بشكل مباشر في عقدة الجذر)

<Window
   xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
   xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
   x:Name="window" >

    ...

    <i:Interaction.Triggers>
      <ei:DataTrigger Binding="{Binding FlashingBackground, Mode=OneWay}" Value="ON">
        <ei:ControlStoryboardAction Storyboard="{StaticResource MyAnimation}"     
                                                ControlStoryboardOption="Play"/>
      </ei:DataTrigger>
    </i:Interaction.Triggers>

    ...
</Window>

وViewModel:

 private void TurnOnFlashingBackround()
    {
        FlashingBackground = "ON";
    }

    private string _FlashingBackround = "OFF";

    public string FlashingBackground
    {
        get { return _FlashingBackround; }

        private set
        {
            if (FlashingBackground == value)
            {
                return;
            }

            _FlashingBackround = value;
            this.OnPropertyChanged("FlashingBackground");
        }
    }

    public new event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

وأخيرا، يجب على Viewmodel ترث من "INotifyPropertyChanged"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top