C# 如何从对象中获取Xamarin.Forms元素的名称?

C# 如何从对象中获取Xamarin.Forms元素的名称?,c#,xaml,xamarin,xamarin.forms,C#,Xaml,Xamarin,Xamarin.forms,像按钮、条目、标签、选择器等视图可以具有x:Name属性 x定义为xmlns:x=”http://schemas.microsoft.com/winfx/2009/xaml“ 现在我想处理未分类的项目,因此我使用object作为类型 如何从对象获取代码中作为字符串的x:Name属性?我不知道这个阶段的类型 编辑: 为了让事情更清楚,我想发布一些代码。我有一个普通的XAML页面,如下所示: 在代码隐藏文件中,如果执行nameof(this.myLabelName),则可以获得x:Name属

按钮
条目
标签
选择器
等视图可以具有
x:Name
属性


x
定义为
xmlns:x=”http://schemas.microsoft.com/winfx/2009/xaml“

现在我想处理未分类的项目,因此我使用
object
作为类型

如何从
对象
获取代码中作为字符串的
x:Name
属性?我不知道这个阶段的类型

编辑:

为了让事情更清楚,我想发布一些代码。我有一个普通的XAML页面,如下所示:


在代码隐藏文件中,如果执行
nameof(this.myLabelName)
,则可以获得
x:Name
属性。但是,如果您只有
对象
,该如何实现呢

public分部类HelloXamlPage
{
公共HelloXamlPage()
{
初始化组件();
List items whichpassthecheck=this.Check(new List(){this.myLabelName});
}
}
私人列表检查(列表项列表)
{
//在这里做一些检查。。。
//这里我只有object,我想得到它的x:Name属性
}

我百分之百确定有一种方法可以重构代码以避免您的需求,但为了回答这个问题,以下是如何获取任何对象的名称:

我们可以肯定地知道,任何带有
x:Name
标记的对象都将创建一个同名字段

因此,使用反射,您应该能够获取页面中定义的所有字段,将它们与对象进行比较,并返回匹配的字段名

我还没有测试过这个,但应该可以,或者至少让你走上正轨

string GetNameOf(对象topLevelXaml,对象引用)
{
var fields=topLevelXaml.GetType().GetFields();
foreach(字段中的变量fi){
var值=fi.GetValue(topLevelXaml);
如果(值!=参考)
继续;
返回fi.Name;
}
返回null;
}

但是,您可能根本不需要这个。

当您想要获取元素的属性名时。我是说当事件发生时还是加载时?我不知道你的确切意思。用户按下一个按钮,然后我想做一些检查。在这里,我需要访问name属性。我得到的“ReflectionExtensions.GetFields(Type)”由于其保护级别而不可访问。现在我改用
GetRuntimeFields()
,得到了名称。对于
topLevelXaml
我使用
this
(当前页面)。但你是对的,我会重新考虑我的方法。