我的 XAML 文件中有这段代码,据说应该设置
RadioButtons
的 Page
的样式,这几乎是我在 StackOverflow 上找到的一种方法:
<ContentPage.Resources>
<ControlTemplate x:Key="RadioButtonTemplate">
<Border BackgroundColor="Transparent" Stroke="Transparent">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid
Grid.Column="0"
HeightRequest="20"
HorizontalOptions="Center"
VerticalOptions="Center"
WidthRequest="20">
<Ellipse
x:Name="border_circle"
Fill="Transparent"
HeightRequest="18"
HorizontalOptions="Center"
Stroke="{AppThemeBinding Light='#dddddd',
Dark='#999999'}"
StrokeThickness="2"
VerticalOptions="Center"
WidthRequest="18" />
<Ellipse
x:Name="check"
Fill="{AppThemeBinding Light='#dddddd',
Dark='#999999'}"
HeightRequest="10"
HorizontalOptions="Center"
VerticalOptions="Center"
WidthRequest="10" />
</Grid>
<ContentPresenter
Grid.Column="1"
Margin="10,0,0,0"
HorizontalOptions="Start"
VerticalOptions="Center" />
</Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroupList>
<VisualStateGroup x:Name="CheckedStates">
<VisualState x:Name="Checked">
<VisualState.Setters>
<Setter TargetName="check" Property="Opacity" Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Unchecked">
<VisualState.Setters>
<Setter TargetName="check" Property="Opacity" Value="0" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
<Style x:Key="RadioButtonStyle" TargetType="RadioButton">
<Setter Property="ControlTemplate" Value="{StaticResource RadioButtonTemplate}" />
</Style>
</ContentPage.Resources>
问题是样式没有应用。
RadioButtons
保持其原来的颜色。我是不是错过了什么?
样式没有完全应用的原因是因为你明确设置了样式,
<Style x:Key="RadioButtonStyle"
根据文档
显式 Style 对象是通过指定 TargetType 和 x:Key 值,并将目标元素的 Style 属性设置为 x:Key 引用来定义的。
所以当你在XAML中使用
RadioButton
的Style时,你也应该设置
<RadioButton ... Style="{StaticResource RadioButtonStyle}">
或者您可以在 ControlTemplate 中设置隐式样式(通过删除
x:Key="RadioButtonStyle"
)。
有关更多信息,请参阅使用 XAML 设计应用程序、重新定义 RadioButton 外观。