static void ButtonDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { var element = sender as FrameworkElement; if (element == null) { return; } var jumpSupportData = GetJumpSupportData(element); var methodPool = GetMethodPool(element); var target = WPFOperate.GetChild <FrameworkElement>(element, jumpSupportData.TargetName); if (target == null) { return; } Type type = methodPool.GetType(); MethodInfo info = type.GetMethod(jumpSupportData.MethodName); object result = null; if (jumpSupportData.ArgCount > 1) { var context2 = GetDataContextSource2(element); result = info.Invoke(methodPool, new[] { element.DataContext, context2 }); } else { result = info.Invoke(methodPool, new[] { element.DataContext }); } PropertyInfo propertyInfo = target.GetType().GetProperty(jumpSupportData.TargetProperty); propertyInfo.SetValue(target, result, new object[] { }); }
private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { bool oldIsEnabled = (bool)e.OldValue; bool newIsEnabled = (bool)d.GetValue(IsEnabledProperty); var itemsControl = d as ItemsControl; if (itemsControl == null) { return; } if (newIsEnabled) { itemsControl.Loaded += (ss, ee) => { ScrollViewer scrollviewer = WPFOperate.GetChild <ScrollViewer>(itemsControl); if (scrollviewer != null) { ((ICollectionView)itemsControl.Items).CollectionChanged += (sss, eee) => scrollviewer.ScrollToEnd(); } }; } }