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
(当前页面)。但你是对的,我会重新考虑我的方法。