Я пытаюсь получить доступ к закрытому полю _id
в Xamarin.Forms.Element
. Который является дальним родителем Xamarin.Forms.Label
.
void Handle_Clicked(object sender, System.EventArgs e)
{
var label = new Label() { Text = "text" };
var element = GetElement(label.GetType());
var field = element.GetField("_id", BindingFlags.Instance | BindingFlags.NonPublic);
var runtimeFields = element.GetRuntimeFields();
var runtimeField = runtimeFields.First(f => f.Name == "_id");
Console.WriteLine("label: " + field.GetValue(label));
Console.WriteLine("runtime label: " + runtimeField.GetValue(label));
}
Я получаю базовый тип элемента с помощью этого метода
private Type GetElement(Type type)
{
if (type.Name != "Element")
{
return GetElement(type.BaseType);
}
return type;
}
Я успешно получаю _id field и runtimeField - но при вызове GetValue(label)
я получаю ноль. При установке точки останова и проверке я вижу, что label
имеет значение для _id
в Xamarin.Forms.Element
BaseType. Но это значение не записывается в консоль. Почему?
При создании метки в xaml я все равно получаю ноль из поля _id
.
<Label Text="text" x:Name="label"/>
И при установке точки останова я вижу, что поле _id
имеет значение.