internal static FrameworkElement FindNearestStatefulControl(FrameworkElement contextElement) { FrameworkElement resolvedControl = (FrameworkElement)null; VisualStateUtilities.TryFindNearestStatefulControl(contextElement, out resolvedControl); return(resolvedControl); }
private static bool ShouldContinueTreeWalk(FrameworkElement element) { if (element == null || element is UserControl) { return(false); } if (element.Parent == null) { FrameworkElement templatedParent = VisualStateUtilities.FindTemplatedParent(element); if (templatedParent == null || !(templatedParent is Control) && !(templatedParent is ContentPresenter)) { return(false); } } return(true); }
/// <summary> /// Es wird nach dem nächsten übergeordneten Element gesucht, das visuelle Zustände enthält. /// /// </summary> /// <param name="contextElement">Das Element, bei dem das nächste zustandsbehaftete Steuerelement gefunden wird.</param><param name="resolvedControl">Das nächste statusbehaftete Steuerelement, wenn "true"; andernfalls "Null".</param> /// <returns> /// "true", wenn ein übergeordnetes Element visuelle Zustände enthält; andernfalls "false". /// </returns> public static bool TryFindNearestStatefulControl(FrameworkElement contextElement, out FrameworkElement resolvedControl) { FrameworkElement frameworkElement = contextElement; if (frameworkElement == null) { resolvedControl = (FrameworkElement)null; return(false); } else { FrameworkElement element = frameworkElement.Parent as FrameworkElement; bool flag = true; for (; !VisualStateUtilities.HasVisualStateGroupsDefined(frameworkElement) && VisualStateUtilities.ShouldContinueTreeWalk(element); element = element.Parent as FrameworkElement) { frameworkElement = element; } if (VisualStateUtilities.HasVisualStateGroupsDefined(frameworkElement)) { if (frameworkElement.TemplatedParent != null && frameworkElement.TemplatedParent is Control) { frameworkElement = frameworkElement.TemplatedParent as FrameworkElement; } else if (element != null && element is UserControl) { frameworkElement = element; } } else { flag = false; } resolvedControl = frameworkElement; return(flag); } }