android .Net Maui Switch可视状态管理器不会将OnColor更改为Off状态

t2a7ltrp  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(106)

只是实现了一个切换到显示器,它有一个黑色背景的Android.
添加了一个开关设法设置OnColor和ThumbColor为打开状态和Thumbcolor为关闭状态,但无论我修补,我不能设置Oncolor为关闭状态使用视觉状态管理器(希望这是有意义的)。
正如您在下图中所看到的,打开状态为绿色,关闭状态不显示任何融合到黑色背景中的内容。我想把它设置为灰色。

我的交换机

<Switch IsToggled="True" Style="{StaticResource ToggleSwitch}">

在MyStyles.xaml中,我添加了自定义样式。

<Style x:Key ="ToggleSwitch" TargetType="Switch">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="On">
                        <VisualState.Setters>
                            <Setter Property="OnColor"
                            Value="Green" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Off">
                        <VisualState.Setters>
                            <Setter Property="OnColor"
                            Value="Gray" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

我已经看到其他答案建议改变背景和背景颜色,这不是答案,因为背景必须是黑色的。无论我怎么尝试,我都不能改变关闭状态的颜色。
任何建议/指针总是赞赏。
参考:.NET MAUI: Change off color of switch <--这个答案一点也不好。
https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/switch#switch-visual-states
https://learn.microsoft.com/en-us/dotnet/maui/user-interface/visual-states
考虑以这种速度使用定制解决方案:-https://github.com/IeuanWalker/Maui.Switch
但更愿意使用本机或尽可能接近本机。
先谢了。

pgky5nke

pgky5nke1#

无论我怎么尝试,我都无法改变关闭状态的颜色。
这是因为Switch本身只有OnColor属性,该属性只能在On位置时获取或设置开关的颜色。因此,如果有一个BindableProperty OffColor可以为Switch设置,那将是完美的。
但是,您可以提出功能请求:https://github.com/dotnet/maui/issues/new/choose用于添加BindableProperty OffColor以设置Switch。
作为替代解决方法,您可以使用您提到的自定义解决方案:https://github.com/IeuanWalker/Maui.Switch。我检查了示例代码,您可以通过CustomSwitch_SwitchPanUpdate方法更改Off状态颜色:

static void CustomSwitch_SwitchPanUpdate(CustomSwitch customSwitch, SwitchPanUpdatedEventArgs e) 
{
       //Switch Color Animation
        Color fromSwitchColor = e.IsToggled ? Color.FromArgb("#6200ee") : Color.FromArgb("#fafafa");
        Color toSwitchColor = e.IsToggled ? Color.FromArgb("#fafafa") : Color.FromArgb("#6200ee");

        Color fromColor = e.IsToggled ? Color.FromArgb("#00ff00") : Color.FromArgb("#808080");
        Color toColor = e.IsToggled ? Color.FromArgb("#808080") : Color.FromArgb("#00ff00");

        double t = e.Percentage * 0.01;

        customSwitch.KnobBackgroundColor = ColorAnimationUtil.ColorAnimation(fromSwitchColor, toSwitchColor, t);
        customSwitch.BackgroundColor = ColorAnimationUtil.ColorAnimation(fromColor, toColor, t);
}

黑色背景输出:

相关问题