2017-04-26 56 views
1

我有以下情況,我希望使用2個不同的標籤,具體取決於我使用的設備(手機或平板電腦)。Xamarin - 是否可以在OnIdiom中包裝的xaml元素上使用x:Name?

<ContentPage xmlns:local="namespace;assembly"> 
    <ContentPage.Content> 

    <Label x:Name="someLabel" Text="Not important"/> 
    <!-- some views here --> 

    <OnIdiom x:TypeArguments="View"> 
    <OnIdiom.Phone> 
     <Label x:Name="myLabel" Text="{Binding InvoiceURL}"/> 
     </OnIdiom.Phone> 
    <OnIdiom.Tablet> 
     <Label x:Name="myLabelTablet" Text="{Binding InvoiceURL}" /> 
     </OnIdiom.Tablet> 

    </OnIdiom> 

    <!-- some views here --> 

    </ContentPage.Content> 
</ContentPage> 

這是我希望執行的代碼,但它不會建由於錯誤:

public MyPage() 
    { 
     InitializeComponent(); 
     someLabel.Text = "Hello World"; 

     if (Device.Idiom == TargetIdiom.Phone) 
     doSomething(myLabel); 
     else if (Device.Idiom == TargetIdiom.Tablet) 
     doSomething(myLabelTablet); 
    } 

是我得到的錯誤如下:

The name 'myLabel' does not exist in the current context 
The name 'myLabelTablet' does not exist in the current context 

會是什麼一個很好的方法來解決這個問題? 我得到這些錯誤的原因是什麼?

回答

0

嘗試設置x:在OnIdiom元素上的名稱並訪問其PhoneTablet屬性。

<Label x:Name="someLabel" Text="Not important"/> 
    <!-- some views here --> 

    <OnIdiom x:Name="myLabel" x:TypeArguments="Label"> 
    <OnIdiom.Phone> 
     <Label Text="{Binding InvoiceURL}"/> 
     </OnIdiom.Phone> 
    <OnIdiom.Tablet> 
     <Label Text="{Binding InvoiceURL}" /> 
     </OnIdiom.Tablet> 

    </OnIdiom> 

    <!-- some views here --> 

    </ContentPage.Content> 
    </ContentPage> 

和在後面

public MyPage() 
{ 
    InitializeComponent(); 
    someLabel.Text = "Hello World"; 

    if (Device.Idiom == TargetIdiom.Phone) 
     doSomething(myLabel.Phone); 
    else if (Device.Idiom == TargetIdiom.Tablet) 
     doSomething(myLabel.Tablet); 
} 
代碼
相關問題