Aynı problemle karşılaştım ve bu yazıların hiçbiri, animasyonlar kodda olduğundan ve bazılarının büyük ve karmaşık ve değişken dalgalanan değişkenler olduğundan, kodda kalmak zorunda kalmaları için gerçekten yardımcı olmadı. Animasyonları tetikleyen kullanıcı denetiminde (görünüm) bağımlılık özellikleri ekleyerek ve bunları görünüm modelindeki özelliklere bağlayarak çözdüm. Bu bir şeyi veya başka bir şeyi ihlal ederse (/ bakım) bilmiyorum, çünkü çok iyi çalışıyor! şerefe, stepp
alıntı: arkasında
(görünüm) UserControl'ın kodu:
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
SetAnimationBindings();
}
private void SetAnimationBindings()
{
_dialogStartPosition = mbFolderBrowse.Margin;
var propName = "StartDialogAnimation";
var binding = new Binding(propName) { Mode = BindingMode.TwoWay };
this.SetBinding(DialogAnimationProperty, binding);
propName = "StartProgressAnimation";
binding = new Binding(propName) { Mode = BindingMode.TwoWay };
this.SetBinding(ProgressAnimationProperty, binding);
}
#region Animation Properties
#region DialogAnimation
public static readonly DependencyProperty DialogAnimationProperty =
DependencyProperty.Register("DialogAnimation", typeof(bool),
typeof(Manage), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnDialogAnimationChanged));
public bool DialogAnimation
{
get { return (bool)this.GetValue(DialogAnimationProperty); }
set
{
var oldValue = (bool)this.GetValue(DialogAnimationProperty);
if (oldValue != value) this.SetValue(DialogAnimationProperty, value);
}
}
private static void OnDialogAnimationChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
Manage m = o as Manage;
if ((bool)e.NewValue == true)
m.SlideInDialogPanel(); // animations
else
m.SlideOutDialogPanel();
}
#endregion
Görüntüleme Model:
public bool StartDialogAnimation
{
get { return _startDialogAnimation; }
set
{
if (_startDialogAnimation != value)
{
_startDialogAnimation = value;
RaisePropertyChanged("StartDialogAnimation");
}
}
}
bunu biliyorum. Bir koşul girdiğinizde storyboard'u başlatmak için bir tetikleyici oluşturuyorsunuz. Ama sadece bir kerelik bir animasyon yapmam gerekiyor: Dikkat çekmek için bir UI elemanında hızlı, geçici bir flaş yapmak istiyorum. – RandomEngy
Bunu genelleştirmeyi düşünmedim, bu yüzden size yardımcı olup olmadığını bilmiyorum. Bir zamanlar benzer bir ihtiyacım vardı. Bir dakikası faaliysem bir tuşa basmam gerekiyordu. Bu düğmeye bağlı bir storyboard sahip yaparak yaptım, storyboard bir dakika için hiçbir şey yapmaz sonra flaş yapmak. Benim durumumda, tıklandığında düğmeye basıldı, böylece senaryo daha basit hale geldi. Bir UI öğesindeki bir flaş, yalnızca ilgili olan görünüm gibi dikkat seslerini yakalar. Görünümün kendi kendine ne zaman yanıp söneceğini belirleyebileceği bir yol var mı? VM neden bir UI elemanını yakma konusunda umursadı? Üzgünüm, bu çok yardımcı olmayabilir. – Carlos
Bir pencerede yanan birkaç komut, bu flaşı başka bir pencerede tetikler. Pencereleme modelim, VM'nin pencereler arasındaki ilişkileri bildiği, ancak görünümlerin bulunmadığı şekilde ayarlanmıştır. – RandomEngy