将StackLayout中Label的TextColor绑定到BindingContext

时间:2015-08-21 13:27:47

标签: c# xaml binding xamarin.forms staticresource

我需要绑定TextColor的{​​{1}}。但是Label位于Label StackLayout BindingContext内,因此绑定不适用于SelectedArticle之外的任何绑定( am I这里错了吗?

SelectedArticle

public Color ArticleFontColor { get; set; }

想一想,我尝试使用Style,但价值不会结合。

<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> 可以改变运行时,这就是我需要绑定的原因

2 个答案:

答案 0 :(得分: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/(数据触发器部分)

答案 1 :(得分:0)

经过大量的搜索,我找到了这个解决方案:

x:Name标记添加到您的ContentPage或根布局。

例如

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

然后,使用x:Name作为参考,并获取其BindingContext

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