Given a reference to an object defined in XAML, is it possible to determine what (if any) x:Name the object has, or can I only do this by accessing the FrameworkElement.Name property (if the object is a FrameworkElement)?
Asked
Active
Viewed 8,052 times
8
-
1The object reference you have would be based on the name of the object already, wouldn't it? How else would you have an object reference which is defined in xaml? – VoodooChild Jun 17 '10 at 23:34
-
In a custom MarkupExtension, obtained by IServiceProvider.GetService. – devios1 Jun 17 '10 at 23:46
-
@VoodooChild by navigating the visual/logical object tree. – Neutrino Aug 29 '13 at 15:10
1 Answers
7
One approach you could take is to first check if the object is a FrameworkElement
, and if not, try reflection to get the name:
public static string GetName(object obj)
{
// First see if it is a FrameworkElement
var element = obj as FrameworkElement;
if (element != null)
return element.Name;
// If not, try reflection to get the value of a Name property.
try { return (string) obj.GetType().GetProperty("Name").GetValue(obj, null); }
catch
{
// Last of all, try reflection to get the value of a Name field.
try { return (string) obj.GetType().GetField("Name").GetValue(obj); }
catch { return null; }
}
}

Joseph Sturtevant
- 13,194
- 12
- 76
- 90
-
This is what I ended up doing... and also checking for FrameworkContentElement, since they're different branches but both have a Name property. – devios1 Jun 18 '10 at 19:50
-