private static void OnPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e)
{
var uie = dpo as FrameworkElement;
if (uie == null)
{
return;
}
var newBehaviors = e.NewValue as StylizedBehaviorCollection;
var oldBehaviors = e.OldValue as StylizedBehaviorCollection;
if (newBehaviors == oldBehaviors)
{
return;
}
BehaviorCollection itemBehaviors = Interaction.GetBehaviors(uie);
uie.Unloaded -= FrameworkElementUnloaded;
if (oldBehaviors != null)
{
foreach (var behavior in oldBehaviors)
{
int index = GetIndexOf(itemBehaviors, behavior);
if (index >= 0)
{
itemBehaviors.RemoveAt(index);
}
}
}
if (newBehaviors != null)
{
foreach (var behavior in newBehaviors)
{
int index = GetIndexOf(itemBehaviors, behavior);
if (index < 0)
{
var clone = (Behavior)behavior.Clone();
SetOriginalBehavior(clone, behavior);
itemBehaviors.Add(clone);
}
}
}
if (itemBehaviors.Count > 0)
{
uie.Unloaded += FrameworkElementUnloaded;
}
uie.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
}