我的问题是这个问题的扩展,我想根据单选按钮的状态更改文本颜色。如果选中,我希望它是白色的,如果未选中,我希望它是黑色的。
详情: 我在应用程序中使用自定义样式的单选按钮,遵循重新定义 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>
这就是我现在所拥有的。我正在尝试将所选项目的文本颜色更改为白色。
感谢您的帮助。
我要做的就是将
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>