2014-07-16 16 views
6

Tôi đang cố gắng để thêm một tên cho một nhãn để tôi có thể tìm thấy nó bằng cách sử dụng Content.FindByName <>() phương phápLàm thế nào để thiết lập tên của một Label trong Xamarin Forms

như xa như tôi có thể nói với lớp Xamarin.Forms.Label() không có một thuộc tính Name

đây là lớp trang của tôi

public class HelloWordCodePage : ContentPage 
{ 
    public Label HelloWorldLabel; 

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

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

Nếu bạn đang làm cho nó trong mã tại sao không chỉ giữ tham chiếu bằng cách nào đó? –

Trả lời

1

tôi tin rằng tên được chỉ có nghĩa là để được sử dụng khi tạo các yếu tố trong XAML. Nếu bạn nhìn vào thừa kế, bạn sẽ tìm thấy Element ở phía dưới và nó thực hiện INameScope một cách rõ ràng. Bạn không thể cast Label để INameScope như đó là một giao diện nội bộ:

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

     void RegisterName(string name, object scopedElement); 

     void UnregisterName(string name); 
    } 
} 
0

Tên được gán ở giai đoạn chế biến Render. Không cần phải biết tên hiển thị tại thời điểm này khi bạn đang làm việc trên một nền tảng chéo ContentPage.

GUID, nhưng giống như bạn nói không có ID. Bạn sẽ không theo ý kiến ​​của tôi bao giờ muốn có được một ID nền tảng cụ thể cho điều khiển được tạo ra ở mức thiết kế trang cao này. Nếu bạn làm như vậy thì có lẽ bạn cần phải tạo một nền tảng cụ thể cho PageRenderer thay thế?

Khi bạn bắt đầu viết CustomRenderers và tạo điều khiển nền tảng cụ thể, bạn có thể gán ID nếu bạn muốn bất kỳ triển khai cụ thể nền tảng điều khiển cụ thể nào bạn muốn.

Ghi trên hiện hành ContentPage - bạn có một tham chiếu đối tượngđẳng cấp scoped đã vào nhãn của bạn tên là HelloWorldLabel, mà bạn có thể sử dụng để thay đổi vv xuất hiện của nó trên trang khi trong thực hiện.

5

Nếu bạn xác định nhãn của bạn trong XAML, bạn có thể sử dụng Syntex này:

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

Và sau đó truy cập vào nó trong mã đằng sau như thế này

YourLableName.Text = "bla bla" 

Tuy nhiên, nếu bạn không sử dụng Xaml, và tất cả các định nghĩa trang của bạn được tìm thấy trong mã phía sau, bạn nên giữ một tham chiếu đến nhãn đó để truy cập nó thay vì tìm kiếm nó bằng cách sử dụng Content.FindByName<>() như @Sten Petrov đã nhận xét

0

StyleId

Sử dụng thuộc tính StyleId để xác định các phần tử riêng lẻ trong ứng dụng của bạn để nhận dạng trong kiểm tra ui và trong công cụ chủ đề.

Các vấn đề liên quan