2015-08-21 3 views
2

Мне нужно привязать TextColor от Label. Но Label находится внутри StackLayout с BindingContext из SelectedArticle, следовательно, Binding не работает ни с чем снаружи SelectedArticle для связывания (я неправильно здесь?)Связывание TextColor метки внутри StackLayout с BindingContext

public Color ArticleFontColor { get; set; }

<StackLayout BindingContext="{Binding SelectedArticle}"> 
    <Label Text="{Binding Title}" FontSize="Large" 
      TextColor="{Binding ArticleFontColor}" 
      FontAttributes="Bold"></Label> 
</StackLayout> 

Думая, что я попытался используя стиль, но значение не связывается.

<ContentPage.Resources> 
    <ResourceDictionary> 
     <Style x:Key="labelStyle" TargetType="Label"> 
      <Setter Property="TextColor" Value="{Binding ArticleFontColor}" /> 
     </Style> 
    </ResourceDictionary> 
</ContentPage.Resources> 


<Label Text="{Binding Title}" FontSize="Large" 
      Style="{StaticResource labelStyle}" 
      FontAttributes="Bold"></Label> 

TextColor можно изменить время работы, вот почему мне нужно связывание

ответ

0

После долгих поисков, я нашел это решение:

Добавить x:Name тег в ContentPage или корня Layout.

например.

<ContentPage ... ... x:Name="MyRoot">

Затем используйте, что x:Name в качестве эталона и получить его BindingContext

TextColor="{Binding BindingContext.ArticleFontColor, Source={Reference MyRoot}}"

0

стилей не будет работать со значениями из привязок.

Первый вариант: Вам не нужно стили для этого:

<Label Text="{Binding Title}" FontSize="Large" 
      TextColor="{Binding ArticleFontColor}" 
      FontAttributes="Bold"></Label> 

ArticleFontColor Если не Color типа (например, только string.), Вы должны использовать IValueConverter реализацию, чтобы выполнить преобразование (https://developer.xamarin.com/guides/cross-platform/xamarin-forms/user-interface/xaml-basics/data_binding_basics/ - поиск IValueConverter).

Второй вариант: Использование триггеров для установки стилей: http://developer.xamarin.com/guides/cross-platform/xamarin-forms/working-with/triggers/ (раздел Триггеры данных)

+0

'ArticleFontColor' является' Color' Кроме того, мой первый фрагмент кода ваш первый вариант. Но его не работает, вероятно, потому, что его родительский 'StackLayout' имеет' BindingContext' для 'SelectedArticle'. 'ArticleFontColor' не является собственностью' SelectedArticle'. Вот почему вопрос. –

 Смежные вопросы

  • Нет связанных вопросов^_^