如何在.Net MAUI中根据控件状态改变ContentPresenter的文本颜色

问题描述 投票:0回答:1

我的问题是这个问题的扩展,我想根据单选按钮的状态更改文本颜色。如果选中,我希望它是白色的,如果未选中,我希望它是黑色的。

详情: 我在应用程序中使用自定义样式的单选按钮,遵循重新定义 RadioButton 外观,它创建 ControlTemplate 来自定义外观并使用 ContentPresenter 来显示文本/内容。

我将其修改为我想要的形状,但无法根据单选按钮是否选中来更改文本颜色。

下面是我的代码。

<ControlTemplate x:Key="RadioButtonTemplate">
    <Border x:Name="RadioBorder1"
            StrokeShape="RoundRectangle 3"
            BackgroundColor="#F3F2F1"
            HeightRequest="30"
            WidthRequest="120">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CheckedStates">
                    <VisualState x:Name="Checked">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="MediumPurple" />
                            <Setter Property="Stroke" Value="MediumPurple" />
                            <Setter TargetName="check" Property="Opacity" Value="1" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Unchecked">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="#F3F2F1" />
                            <Setter Property="Stroke" Value="#F3F2F1" />
                            <Setter TargetName="check" Property="Opacity" Value="0" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </VisualStateManager.VisualStateGroups>
        <Grid Margin="4" WidthRequest="120">
            <Grid WidthRequest="120" HeightRequest="30">
                <RoundRectangle />
                <RoundRectangle x:Name="check" />
            </Grid>
            <ContentPresenter HorizontalOptions="StartAndExpand" Padding="5,1,1,1" />
        </Grid>
    </Border>
</ControlTemplate>

<Style TargetType="RadioButton">
            <Setter Property="ControlTemplate"
                    Value="{StaticResource RadioButtonTemplate}" />
</Style>

这就是我现在所拥有的。我正在尝试将所选项目的文本颜色更改为白色。

感谢您的帮助。

xaml radio-button maui controltemplate visualstatemanager
1个回答
0
投票

您可以使用相对绑定绑定值转换器来解决它。

我要做的就是将

Label
TextColor
属性绑定到
RadioButton
IsChecked
属性,

<Label Text="Cat"
       TextColor="{Binding IsChecked,Source={RelativeSource AncestorType={x:Type RadioButton}},Converter={StaticResource isCheckedConverter}}"
       HorizontalOptions="Center"
       VerticalOptions="End" />

所以,我们需要一个值转换器。 我们创建一个名为 IsCheckedConverter.cs,

的新类
public class IsCheckedConverter : IValueConverter
{
    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
    {
        bool a = (bool)value;
        if (a)
        {
            return Colors.White;
        }
        else {
            return Colors.Black;           
        }         
    }

    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
    {
        return Binding.DoNothing;
    }

别忘了把它放进去

ContentPage.Resources

<ContentPage.Resources>
    ......

    <local:IsCheckedConverter x:Key="isCheckedConverter"/>
</ContentPage.Resources>
© www.soinside.com 2019 - 2024. All rights reserved.