XAML Xamarin可视状态管理器无法解析嵌套元素上的属性类型

qcbq4gxm  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(111)

我是Xamarin的新手,我想尝试改变单选按钮的外观。但是用我目前的代码,我得到了错误Cannot resolve property type "TextColor" on type "Grid"
以下是我的代码:

<ContentPage.Resources>
        <ControlTemplate x:Key="RadioButtonTemplate">
            <Grid RowSpacing="0">
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroupList>
                        <VisualStateGroup x:Name="CheckedStates">
                            <VisualState x:Name="Checked">
                                <VisualState.Setters>
                                    <Setter TargetName="checkBorderTop"
                                            Property="BackgroundColor"
                                            Value="{x:StaticResource PrimaryColor}"/>
                                    <Setter TargetName="checkBorderBot"
                                            Property="BackgroundColor"
                                            Value="{x:StaticResource PrimaryColor}"/>
                                    <Setter TargetName="check"
                                            Property="BackgroundColor"
                                            Value="{x:StaticResource PrimaryShade}"/>
                                    <Setter TargetName="checkIcon"
                                            Property="TextColor"
                                            Value="{x:StaticResource PrimaryColor}"/>
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="Unchecked">
                                <VisualState.Setters>
                                    <Setter TargetName="checkBorderTop"
                                            Property="BackgroundColor"
                                            Value="Transparent"/>
                                    <Setter TargetName="checkBorderBot"
                                            Property="BackgroundColor"
                                            Value="Transparent"/>
                                    <Setter TargetName="check"
                                            Property="BackgroundColor"
                                            Value="Transparent"/>
                                    <Setter TargetName="checkIcon"
                                            Property="TextColor"
                                            Value="Black"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateGroupList>
                </VisualStateManager.VisualStateGroups>
                <Grid.RowDefinitions>
                    <RowDefinition Height="2"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="2"/>
                </Grid.RowDefinitions>
                <BoxView x:Name="checkBorderTop" 
                         Grid.Row="0"/>
                <Frame x:Name="check" 
                       BorderColor="Transparent"
                       Margin="0"
                       Padding="20, 10"
                       Grid.Row="1">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="20"/>
                            <ColumnDefinition Width="auto"/>
                        </Grid.ColumnDefinitions>
                        <Label x:Name="checkIcon" 
                               Text="{x:Static icon:FontAwesomeIcons.Paw}"
                               FontFamily="IconSolid"
                               HorizontalOptions="Start"
                               FontSize="20"
                               VerticalTextAlignment="Center"/>
                        <ContentPresenter Grid.Column="1"/>
                    </Grid>
                </Frame>
                <BoxView x:Name="checkBorderBot"
                         Grid.Row="2"
                         Margin="0"/>
            </Grid>
        </ControlTemplate>
        <Style TargetType="RadioButton">
            <Setter Property="ControlTemplate"
                    Value="{StaticResource RadioButtonTemplate}" />
        </Style>
    </ContentPage.Resources>

以下是我的预期输出:

这段代码在更改背景颜色和边框时效果很好。

<Setter TargetName="checkIcon"
        Property="TextColor"
        Value="{x:StaticResource PrimaryColor}"/>

错误显示。我无法管理改变Paw图标的颜色时,检查和取消检查。我认为它的层次之间的父和子元素,因为标签是在最内部的子,idk。
需要知道答案的人的帮助:(
先谢谢你了

q3aa0525

q3aa05251#

您可以选中“可视状态管理器”。
通常需要在两个或多个视图之间共享同一个可视化状态管理器标记。
也就是说,您可以将Style用于“检视”页面中的Grid元素:

<Style TargetType="Grid">
                <Setter Property="RowSpacing" Value="0" />
                <Setter Property="VisualStateManager.VisualStateGroups">
                    <VisualStateGroupList>
                        <VisualStateGroup x:Name="CheckedStates">
                            <VisualState x:Name="Checked">
                                <VisualState.Setters>
                                    <Setter TargetName="checkBorderTop"
                                            Property="BackgroundColor"
                                            Value="{x:StaticResource PrimaryColor}"/>
                                    <Setter TargetName="checkBorderBot"
                                            Property="BackgroundColor"
                                            Value="{x:StaticResource PrimaryColor}"/>
                                    <Setter TargetName="check"
                                            Property="BackgroundColor"
                                            Value="{x:StaticResource PrimaryShade}"/>
                                    <Setter TargetName="checkIcon"
                                            Property="TextColor"
                                            Value="{x:StaticResource PrimaryColor}"/>
                                </VisualState.Setters>
                            </VisualState>
                            <VisualState x:Name="Unchecked">
                                <VisualState.Setters>
                                    <Setter TargetName="checkBorderTop"
                                            Property="BackgroundColor"
                                            Value="Transparent"/>
                                    <Setter TargetName="checkBorderBot"
                                            Property="BackgroundColor"
                                            Value="Transparent"/>
                                    <Setter TargetName="check"
                                            Property="BackgroundColor"
                                            Value="Transparent"/>
                                    <Setter TargetName="checkIcon"
                                            Property="TextColor"
                                            Value="Black"/>
                                </VisualState.Setters>
                            </VisualState>
                        </VisualStateGroup>
                    </VisualStateGroupList>
                </Setter>
            </Style>

希望能对你有所帮助。

相关问题