예제 #1
0
        internal static FrameworkElement FindNearestStatefulControl(FrameworkElement contextElement)
        {
            FrameworkElement resolvedControl = (FrameworkElement)null;

            VisualStateUtilities.TryFindNearestStatefulControl(contextElement, out resolvedControl);
            return(resolvedControl);
        }
예제 #2
0
 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);
 }
예제 #3
0
        /// <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);
            }
        }