使用 BindingContext 在 StackLayout 中绑定标签的 TextColor
Binding TextColor of Label inside StackLayout with BindingContext
我需要绑定 TextColor
个 Label
。但是 Label
位于 StackLayout
内,BindingContext
为 SelectedArticle
,因此绑定无法与 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
可以在运行时更改,这就是为什么我需要绑定
样式不适用于绑定中的值。
第一个选项:
您不需要样式:
<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/(数据触发器部分)
经过大量搜索,我找到了这个解决方案:
将 x:Name
标记添加到您的 ContentPage
或根布局。
例如
<ContentPage
...
...
x:Name="MyRoot">
然后,使用那个 x:Name
作为参考并得到它的 BindingContext
TextColor="{Binding BindingContext.ArticleFontColor, Source={Reference MyRoot}}"
我需要绑定 TextColor
个 Label
。但是 Label
位于 StackLayout
内,BindingContext
为 SelectedArticle
,因此绑定无法与 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
可以在运行时更改,这就是为什么我需要绑定
样式不适用于绑定中的值。
第一个选项: 您不需要样式:
<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/(数据触发器部分)
经过大量搜索,我找到了这个解决方案:
将 x:Name
标记添加到您的 ContentPage
或根布局。
例如
<ContentPage
...
...
x:Name="MyRoot">
然后,使用那个 x:Name
作为参考并得到它的 BindingContext
TextColor="{Binding BindingContext.ArticleFontColor, Source={Reference MyRoot}}"