XAML 无法在UWP中设置复选框内容颜色

py49o6xq  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(120)

我正在尝试更改复选框内容的颜色。如果复选框被选中,我希望颜色不会更改,但我甚至不能在XAML中更改它。
<CheckBox x:Name="Checkbox" Foreground="White" Content="I agree" HorizontalAlignment="Left" Margin="50,480,0,0" VerticalAlignment="Top" Height="46" Width="938" FontFamily="Arial" Checked="Checkbox_Checked" Background="#FF009FE3" />
但是内容颜色一直显示为黑色。我的错误在哪里?听起来很简单,但是我找不到任何解决方案。我是UWP的新手,什么也不能让它更容易。

z9ju0rcb

z9ju0rcb1#

如果要更改复选框的前景和背景颜色,则需要更新其样式。在默认样式中,它会在不同状态(例如,未选中或选中等)下设置不同的前景和背景。您需要覆盖所需的视觉状态。例如,您可以更改“UncheckedNormal”状态下的前景和背景。

<VisualState x:Name="UncheckedNormal">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Blue"/>
        </ObjectAnimationUsingKeyFrames>
        ......
    </Storyboard>
</VisualState>

当复选框被选中时,如果要更改颜色,只需在“CheckedNormal”状态下执行类似的操作。

<VisualState x:Name="CheckedNormal">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Yellow"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Background">
            <DiscreteObjectKeyFrame KeyTime="0" Value="Red"/>
        </ObjectAnimationUsingKeyFrames>
        ......
    </Storyboard>
</VisualState>

//Apply
<CheckBox x:Name="Checkbox" 
                  Foreground="Blue" 
                  Style="{StaticResource CheckBoxStyle1}"
                  Content="I aggere"
                  HorizontalAlignment="Left" Margin="50,480,0,0" VerticalAlignment="Top" Height="46" Width="938" 
                  FontFamily="Arial"  
                  Checked="Checkbox_Checked" 
                  Background="#FF009FE3" />

您可以在可视化设计器中右键单击您的CheckBox,然后单击“编辑模板-〉编辑副本”来获得完整的样式。这将创建CheckBox的默认模板。更改后的完整样式可以参考here
另外,如果你只是想改变文本的前景,你可以简单地在checkbox中创建一个textBlock并直接设置其前景。

<CheckBox x:Name="Checkbox" 
                  HorizontalAlignment="Left" Margin="50,480,0,0" VerticalAlignment="Top" Height="46" Width="938" 
                  FontFamily="Arial"  
                  Checked="Checkbox_Checked">
    <TextBlock Foreground="Yellow">hello</TextBlock>
</CheckBox>
sbdsn5lh

sbdsn5lh2#

我也在寻找这个问题的答案,但是创建一个模板的副本是一件痛苦的事情,特别是如果你想把颜色绑定到复选框的话。在我看来,只覆盖颜色要容易得多。
下面是我想出的代码:

<CheckBox Margin="12,0,0,0" IsChecked="{Binding Visible}" Content="{Binding Name}">
                            <CheckBox.Resources>
                                <SolidColorBrush x:Name="CheckBoxCheckBackgroundFillChecked" Color="{Binding Color}"/>
                                <SolidColorBrush x:Name="CheckBoxCheckBackgroundStrokeChecked" Color="{Binding Color}"/>

                                <SolidColorBrush x:Name="CheckBoxCheckBackgroundFillCheckedPointerOver" Color="{Binding LighterColor}"/>
                                <SolidColorBrush x:Name="CheckBoxCheckBackgroundStrokeCheckedPointerOver" Color="{Binding LighterColor}"/>

                                <SolidColorBrush x:Name="CheckBoxCheckBackgroundFillCheckedPressed" Color="{Binding LighterColor}"/>
                                <SolidColorBrush x:Name="CheckBoxCheckBackgroundStrokeCheckedPressed" Color="{Binding LighterColor}"/>
                            </CheckBox.Resources>
                        </CheckBox>

所有可以覆盖的颜色都在此文档中,但我使用的颜色是唯一需要更改复选框颜色的颜色。https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.checkbox?view=winrt-22621

相关问题