我有一个简单的组件在MAUI.下面是简化的代码.
C#:
public partial class LabeledValue : ContentView
{
public static readonly BindableProperty ValueColorProperty = BindableProperty.Create(
nameof(ValueColor), typeof(Color), typeof(LabeledValue), default(Color), BindingMode.OneWay);
public Color ValueColor
{
get { return (Color)GetValue(ValueColorProperty); }
set { SetValue(ValueColorProperty, value); }
}
}
XAML:
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="EpexMauiApp.Components.LabeledValue"
x:Name="self">
<Label Text="Dummy text" FontAttributes="Bold" TextColor="{Binding ValueColor, Source={x:Reference self}}"/>
</ContentView>
我想根据当前的应用程序主题设置此属性的默认值,所以当我使用它像
<components:LabeledValue ValueColor="{StaticResource Blue}"/>
它是蓝色的,但当我简单地做
<components:LabeledValue />
颜色是根据主题设置的。我该怎么做?
1条答案
按热度按时间8cdiaqws1#
您可以使用AppThemeBinding和提供的扩展来实现。
首先,您需要删除到
TextColor
的绑定,因为这需要从代码隐藏中设置,并且还给予使用x:Name
属性为Label
命名:然后,在代码隐藏中,您需要在构造函数中以编程方式设置
AppThemeBinding
:最后,您需要添加一个属性更改处理程序,用于在用户覆盖默认设置时设置
TextColor
:当你使用
LabeledValue
控件时,你可以使用默认的行为,它将响应应用主题或覆盖它:您可以在我的MAUI Samples存储库中找到一个工作示例。