7

XAML で定義されたオブジェクトへの参照が与えられた場合、そのオブジェクトが持つ x:Name (存在する場合) を特定することはできますか?それとも、FrameworkElement.Name プロパティにアクセスすることによってのみこれを行うことができますか (オブジェクトが FrameworkElement の場合)。

4

1 に答える 1

7

あなたが取ることができる1つのアプローチは、最初にオブジェクトが であるかどうかを確認しFrameworkElement、そうでない場合はリフレクションを試して名前を取得することです:

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; }
    }
}
于 2010-06-18T01:22:22.213 に答える