2016-08-08 4 views
2

Я новичок в xamarin.formsxamarin.forms - однозначно идентифицировать элементы управления ListView в XAML

У меня есть ListView, который заполняется из бэкенд C# код.

У меня есть одна метка и одно изображение, определенное в ней. И я дал свойство x: Name в XAML.

Теперь, мой вопрос: я хочу получить доступ к этим двум ярлыкам в коде backend C#. Но эти ярлыки недоступны, поскольку они находятся в списке. Если я помещаю ярлык вне списка, я могу получить к нему доступ в коде.

Пожалуйста, избегайте синтаксических ошибок. Мой код работает нормально. Я хочу получить доступ к этим элементам, чтобы изменить стиль телефона и планшета.

Мой XAML код:

// ... 
<ListView x:Name="DentistList"> 
    <Listview.ItemTemplate> 
     <DataTemplate> 
     <ViewCell> 
      <Image Source="{Binding ImagePath}" x:Name="DoctorImage"/> 
      <Label Text="{Binding Name}" x:Name="DoctorName" /> 
     </ViewCell> 
     </DataTemplate> 
    </Listview.ItemTemplate> 
</ListView> 

Мой C# код:

...... 
DentistList.ItemSource = new List<Doctor> 
{ 
     // List of items defined here like... 
     Name = "ABC", 
     ImagePath = "img1.jpg" 

     // Etc... 
}; 

Теперь Ниже в этом списке, я хочу изменить стиль (как, размер шрифта и т.д. ...) этикетки и изображения , Но я не могу получить к ним доступ.

Я попытался получить к ним доступ с помощью метода FindByName(), но не смог этого сделать.

Итак, может кто-нибудь ответить?

Заранее спасибо.

+1

Вы не можете ссылаться на элементы управления в шаблоне по имени, потому что есть несколько экземпляров каждого элемента управления, по одному на элемент в списке. Если вы хотите настроить их на планшет, попробуйте использовать OnIdiom в своем XAML или, возможно, сделайте это, используя стили. – Jason

+1

Благодарим вас за комментарий @Jason, но как я могу изменить шрифты и textcolor с помощью onidiom, потому что я не мог найти решение для имплантирования. –

ответ

1

Из комментария Джейсона, вы можете изменить Label.FontSize и Label.TextColor используя OnIdiom так:

<Label Text="{Binding Name}" x:Name="DoctorName"> 
    <Label.TextColor> 
     <OnIdiom x:TypeArguments="Color" 
       Phone="Yellow" 
       Tablet="Blue"/> 
    </Label.TextColor> 

    <Label.FontSize> 
     <OnIdiom x:TypeArguments="NamedSize" 
       Phone="Small" 
       Tablet="Large"/> 
    </Label.FontSize> 
</Label> 

* Edit: Пример использования регулярных целое число:

<Label.FontSize> 
    <OnIdiom x:TypeArguments="x:Double" 
      Phone="20" 
      Tablet="30"/> 
</Label.FontSize> 

* Edit # 2: Если вы планируйте использовать свои Label.FontSize и Label.TextColor на нескольких страницах. Я бы предложил добавить значения в ваш App.xaml, а затем ссылаться на них с вашего ContentPage s (вы также можете просто добавить значение к ContentPage «s ResourceDictionary, если вы используете значения несколько раз, но только на одной странице):

app.xaml:

<Application xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.App"> 
    <Application.Resources> 
    <ResourceDictionary> 

     <Color x:Key="MyTextColor"> 
     <Color.Accent> 
      <OnIdiom x:TypeArguments="Color" 
        Phone="Yellow" 
        Tablet="Blue"/> 
     </Color.Accent> 
     </Color> 

     <x:Double x:Key="MyFontSize"> 
     <OnIdiom x:TypeArguments="x:Double" 
       Phone="20" 
       Tablet="30"/> 
     </x:Double> 

    </ResourceDictionary> 
    </Application.Resources> 
</Application> 

Теперь в вашем ContentPage s:

<Label x:Name="DoctorName" 
     Text="{Binding Name}" 
     TextColor="{StaticResource MyTextColor}" 
     FontSize="{StaticResource MyFontSize}"/> 

Если вы хотите использовать NamedSize вместо этого вам, возможно, придется использовать конвертер, который я видел на форумах Xamarin. Дайте мне знать, если вы не можете найти его, и я могу попытаться осмотреться.

+1

Thans for comment @ hvaughan3. Я попробую..:) кажется полезным :) –

+1

Могу ли я использовать статическое значение вместо того, чтобы использовать малые и большие? –

+0

@sweets Если вы имеете в виду обычные целочисленные значения, конечно, вы можете. См. Править. – hvaughan3