wpfxamlcode-behindxname

How can I get the x:Name of an object from code?


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)?


Solution

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