10

我正在尝试向标签添加名称,以便可以使用 Content.FindByName<>() 方法找到它

据我所知, Xamarin.Forms.Label() 类没有 Name 属性

这是我的页面类

public class HelloWordCodePage : ContentPage
{
    public Label HelloWorldLabel;

    public HelloWordCodePage()
    {
        HelloWorldLabel = new Label{Text = "Hello World", };
        ConstructView();
    }

    public void ConstructView()
    {
        Content = new StackLayout
        {
            Children =
            {
                HelloWorldLabel
            }
        };
    }
}
4

5 回答 5

15

如果你在 Xaml 中定义你的标签,你可以使用这个语法:

<Label x:Name="YourLableName" Text="A simple Label" />

然后像这样在后面的代码中访问它

YourLableName.Text = "bla bla"

但是,如果您不使用 Xaml,并且您的所有页面定义都在后面的代码中找到,您应该保留对该标签的引用以便访问它,而不是使用Content.FindByName<>()@Sten Petrov 评论的那样找到它

于 2015-03-29T10:50:29.083 回答
1

我相信该名称仅用于在 XAML 中创建元素时使用。如果您查看继承,您会在底部找到Element并且它显式地实现了 INameScope。您不能将 Label 转换为 INameScope,因为这是一个内部接口:

namespace Xamarin.Forms
{
    internal interface INameScope
    {
        object FindByName(string name);

        void RegisterName(string name, object scopedElement);

        void UnregisterName(string name);
    }
}
于 2014-07-17T02:33:37.107 回答
1

名称是在渲染处理阶段分配的。由于您正在处理跨平台ContentPage,因此此时无需知道呈现的名称。

有一个GUID,但就像你说的没有ID。在我看来,您不会希望在这种高级页面设计中为生成的控件获取特定于平台的 ID。如果你这样做了,那么也许你需要创建一个特定于平台的PageRenderer

当您开始编写CustomRenderers并创建特定于平台的控件时,如果您希望任何自定义控件平台特定的实现,您可以分配 ID。

请记住当前的ContentPage - 您已经有一个对名为HelloWorldLabel的标签的类范围对象引用,您可以在执行时使用它来更改其在页面上的外观等。

于 2014-07-17T13:52:08.833 回答
1

样式 ID

使用 StyleId 属性来识别应用程序中的各个元素,以便在 ui 测试和主题引擎中进行识别。

于 2017-09-01T03:21:12.130 回答
1

正如 IdoT 所说,如果您在运行时定义一个对象,则需要保留对该对象的引用才能访问它,因为无法分配名称。我使用这样的字典:

Dictionary<Guid, String> ControlsDictionary = new Dictionary<Guid, string>(); 

然后当我创建一个对象时:

Button bt = new Button {Text="Yay!"};

        bt.Clicked += OnButtonClicked;
        StackLayout.Children.Add(bt);

        ControlsDictionary.Add(bt.Id, "myname");

在 Click 事件处理程序中,我可以识别发件人“名称”:

async void OnButtonClicked(object sender, EventArgs args)
    {

        Button btn = (Button)sender;
        String NameofButton = ControlsDictionary[btn.Id];

    }

您也可以从“名称”中获取 ID:

Guid IdfromName = ControlsDictionary.First(x => x.Value == "myname").Key;
于 2019-01-18T19:59:00.443 回答