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; }