Exemple #1
0
        static DependencyObject FindObject(DependencyObject root, string elementName, bool useVisualTree)
        {
            if (GetObjectName(root) == elementName)
            {
                return(root);
            }
            DependencyObject res      = null;
            FrameworkElement fe       = root as FrameworkElement;
            FrameworkElement feParent = fe.Parent as FrameworkElement;
            FrameworkElement el       = feParent ?? fe;

#if !SILVERLIGHT && !NETFX_CORE
            try {
                res = LogicalTreeHelper.FindLogicalNode(el, elementName);
            } catch { }
            if (res != null)
            {
                return(res);
            }

            FrameworkContentElement fce = root as FrameworkContentElement;
            res = fce != null ? (DependencyObject)fce.FindName(elementName) : null;
            if (res != null)
            {
                return(res);
            }
#endif
            res = el != null ? (DependencyObject)el.FindName(elementName) : null;
            if (res != null)
            {
                return(res);
            }

            if (useVisualTree)
            {
                res = feParent != null?LayoutHelper.FindElementByName(feParent, elementName) : null;

                if (res != null)
                {
                    return(res);
                }

                res = fe != null?LayoutHelper.FindElementByName(fe, elementName) : null;

                if (res != null)
                {
                    return(res);
                }
            }

            return(null);
        }
    /// <summary>
    ///     Finds a BeginStoryboard with the given name, following the rules
    /// governing Storyboard.  Returns null if not found.
    /// </summary>
    /// <remarks>
    ///     If a name scope is given, look there and nowhere else.  In the
    /// absense of name scope, use Framework(Content)Element.FindName which
    /// has its own complex set of rules for looking up name scopes.
    ///
    ///     This is a different set of rules than from that used to look up
    /// the TargetName.  BeginStoryboard name is registered with the template
    /// INameScope on a per-template basis.  So we look it up using
    /// INameScope.FindName().  This is a function completely different from
    /// Template.FindName().
    /// </remarks>
    internal static BeginStoryboard ResolveBeginStoryboardName(
        string targetName,
        INameScope nameScope,
        FrameworkElement fe,
        FrameworkContentElement fce)
    {
        object          namedObject = null;
        BeginStoryboard beginStoryboard = null;

        if( nameScope != null )
        {
            namedObject = nameScope.FindName(targetName);
            if( namedObject == null )
            {
                throw new InvalidOperationException(
                    SR.Get(SRID.Storyboard_NameNotFound, targetName, nameScope.GetType().ToString()));
            }
        }
        else if( fe != null )
        {
            namedObject = fe.FindName(targetName);
            if( namedObject == null )
            {
                throw new InvalidOperationException(
                    SR.Get(SRID.Storyboard_NameNotFound, targetName, fe.GetType().ToString()));
            }
        }
        else if( fce != null )
        {
            namedObject = fce.FindName(targetName);
            if( namedObject == null )
            {
                throw new InvalidOperationException(
                    SR.Get(SRID.Storyboard_NameNotFound, targetName, fce.GetType().ToString()));
            }
        }
        else
        {
            throw new InvalidOperationException(
                SR.Get(SRID.Storyboard_NoNameScope, targetName));
        }

        beginStoryboard = namedObject as BeginStoryboard;

        if( beginStoryboard == null )
        {
            throw new InvalidOperationException(SR.Get(SRID.Storyboard_BeginStoryboardNameNotFound, targetName));
        }

        return beginStoryboard;
    }