用BindingContext在StackLayout中绑定Label的TextColor
本文关键字:Label TextColor 绑定 BindingContext StackLayout | 更新日期: 2023-09-27 18:09:11
我需要绑定Label
的TextColor
。但是Label
在SelectedArticle
的BindingContext
的StackLayout
内,因此绑定不能与SelectedArticle
以外的任何东西一起工作(我在这里错了吗?)
public Color ArticleFontColor { get; set; }
<StackLayout BindingContext="{Binding SelectedArticle}">
<Label Text="{Binding Title}" FontSize="Large"
TextColor="{Binding ArticleFontColor}"
FontAttributes="Bold"></Label>
</StackLayout>
考虑到这一点,我尝试使用Style,但值无法绑定。
<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
可以改变运行时,这就是为什么我需要绑定
经过一番搜索,我找到了这个解决方案:
将x:Name
标签添加到您的ContentPage
或根布局。
。
<ContentPage
...
...
x:Name="MyRoot">
然后,使用x:Name
作为参考,并获得其BindingContext
TextColor="{Binding BindingContext.ArticleFontColor, Source={Reference MyRoot}}"
样式不能处理来自绑定的值。
第一选择:你不需要样式:
<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/(Data Triggers部分)