Something useful is to do Linq Queries.
from b in element.GetChildren<Button> where b.Name == 'someName' && b.Tag = myExpectedValue select b You could even restrict it a bit, to discard other buttons in other places (like toggle buttons in the header). from r in dg.GetChildren<DataGridRow>() from c in r.GetChildren<DataGridCell>() from b in c.GetChildren<Button>() select b On Tue, Mar 9, 2010 at 2:43 PM, Miguel Madero <[email protected]> wrote: > Check in SilverlightSpy. Use Cotrol+Shift+Mouse Over to find it and look at > the Visualtree, then use one of the GetChildren overloads in this class to > find it > > > public > static class VisualTreeExtensions > > { > > public static IEnumerable<DependencyObject> GetChildren(this > DependencyObject depObject) > > { > > int count = depObject.GetChildrenCount(); > > for (int i = 0; i < count; i++) > > { > > yield return VisualTreeHelper.GetChild(depObject, i); > > } > > } > > public static DependencyObject GetChild(this DependencyObject depObject, > int childIndex) > > { > > return VisualTreeHelper.GetChild(depObject, childIndex); > > } > > public static DependencyObject GetChild(this DependencyObject depObject, > string name) > > { > > return depObject.GetChild(name, false); > > } > > public static DependencyObject GetChild(this DependencyObject depObject, > string name, bool recursive) > > { > > foreach (var child in depObject.GetChildren()) > > { > > var element = child as FrameworkElement; > > if (element != null) > > { > > if (element.Name == name) // If its a FrameworkElement check Name > > return element; > > var innerElement = element.FindName(name) as DependencyObject; // Try to > get it using FindByName might be more efficient > > if (innerElement != null) > > return innerElement; > > } > > if (recursive) // If it's recursive search through its children > > { > > var innerChild = child.GetChild(name, recursive); > > if (innerChild != null) > > return innerChild; > > } > > } > > return null; > > } > > public static IEnumerable<TypeToLookFor> GetChildren<TypeToLookFor>(this > DependencyObject depObject, bool recursive) > > where TypeToLookFor : class > > { > > List<TypeToLookFor> types = new List<TypeToLookFor>(); > > foreach (var child in depObject.GetChildren()) > > { > > var found = child as TypeToLookFor; > > if (found != null) > > types.Add(found); > > else if (recursive) // If it's recursive search through its children only > if it wasnt the type we were looking for > > types.AddRange(child.GetChildren<TypeToLookFor>(recursive)); > > } > > return types; > > } > > public static int GetChildrenCount(this DependencyObject depObject) > > { > > return VisualTreeHelper.GetChildrenCount(depObject); > > } > > public static DependencyObject GetParent(this DependencyObject depObject) > > { > > return VisualTreeHelper.GetParent(depObject); > > } > > public static T GetParent<T>(this DependencyObject depObject) > > where T: DependencyObject > > { > > var parent = depObject.GetParent(); > > if(parent ==null || parent is T) > > return parent as T; > > return parent.GetParent<T>(); > > } > > } > > > > -- > Miguel A. Madero Reyes > www.miguelmadero.com (blog) > [email protected] > -- Miguel A. Madero Reyes www.miguelmadero.com (blog) [email protected]
_______________________________________________ ozsilverlight mailing list [email protected] http://prdlxvm0001.codify.net/mailman/listinfo/ozsilverlight
