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