2017-03-06 4 views
1

xamarin(VS2015)の1ページを絶対レイアウトで開発しました。ラベルの束には一意の自動化IDを付けて区別しています。各ラベル)を各ラベルに追加します。xamarinフォームで絶対レイアウトで自分のラベルを見つける方法

<Label x:Name="abc" AutomationId="2000" Text="300" FontSize="Micro" TextColor="Yellow" BackgroundColor="Black" ></Label> 

ここでは、ハードコードなしで動的にラベルをチェックしたいと考えています。

私が言及一意のIDによってレイアウト子でラベルを検出することができますが、それは今、私はラベルに変換したいxamarin.forms.view

int autoID = Convert.ToInt16(absolutelayout.Children[i].AutomationId); 

で私を与えていることができます。これを行う方法はありますか?

答えて

0

あなたの質問を完全に理解したかどうかはわかりませんが、読みにくいです。

あなたは絶対レイアウトの子をループしていると仮定します。レイアウト内のすべてのラベルのオートメーションIDを取得する必要があります。

foreach (var child in absolutelayout.Children){ 
var childAsLabel = child as Label; 
if (childAsLabel != null){ 
int autoID = Convert.ToInt16(childAsLabel.AutomationId); 
} 
} 
+0

これは私のために働いた!!!!ありがとう:)\ –

0

この場合、AutomationIdを悪用する必要はありません。 WPF(またはSilverlight、または任意の他)では、あなたはTagプロパティを使用すると思いますが、Xamarin.Forms

object Tag { get; set; } 

プロパティを提供していません。欠落の理由は非常に簡単です。付属のBindablePropertyを使用して、自分で機能を提供することができます。

public class TagHelper 
{ 
    public static readonly BindableProperty TagProperty = 
     BindableProperty.Create("Tag", typeof(object), typeof(TagHelper), default(object)); 

    public static object GetTag(BindableObject bindable) 
    { 
     return (object)bindable.GetValue(TagProperty); 
    } 

    public static void SetTag(BindableObject bindable, object value) 
    { 
     bindable.SetValue(TagProperty, value); 
    } 
} 

、あなたはこのようなあなたのLabelタグ付け:あなたはAbsoluteLayoutに "mytagという" とのラベルを検索する場合

<Label ... local:TagHelp.Tag="myTag" .../> 

は今、それは難しいことではありません。

var label = layout.Children.FirstOrDefault(v => TagHelper.GetTag(v) == "myTag") as Label; 

AutomationIdを使用することを本当に主張している場合(そうしてはならない)、これはうまくいくはずです

//DON'T 
var label = layout.Children.FirstOrDefault(v => v.AutomationId == "2000") as Label; 
関連する問題