目录

在 Maui 中自绘组件5:状态与视觉效果

在这篇文章中,将为 MagicButton 设置不同状态的视觉效果。

先决条件

资源字典

Resources/Styles 中新建资源字典文件,并定义正常、点击等不同状态的视觉效果样式。

<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:components="clr-namespace:CustomButton.Components"
             x:Class="CustomButton.Resources.Styles.MagicButtonStyles">

    <Style TargetType="components:MagicButton">
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="Blue"/>
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Clicked">
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor" Value="DarkBlue"></Setter>
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
</ResourceDictionary>

MagicButtonStyles 添加到 Resources/Styles/Styles.xaml 中。

<?xml version="1.0" encoding="UTF-8" ?>
<?xaml-comp compile="true" ?>
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="MagicButtonStyles.xaml"></ResourceDictionary>
    </ResourceDictionary.MergedDictionaries>

    <!--......-->

</ResourceDictionary>

状态管理

更改 MagicButton 中的代码,在 OnStartInteractionOnEndInteraction 方法中,通过 VisualStateManager 在按钮被按下时,将状态设为 Clicked,在按钮被松开时,将状态设为 Normal

private void OnStartInteraction(object sender, TouchEventArgs e)
{
    VisualStateManager.GoToState(this, "Clicked");
}

private void OnEndInteraction(object sender, TouchEventArgs e)
{
    VisualStateManager.GoToState(this, "Normal");
}

效果展示

运行项目,点击按钮并松开,可以看到按钮会根据不同状态展示不同样式。

./visual-state.gif
Visual state

推荐内容

源码获取

扫描下方二维码,关注公众号捕获异常,回复 maui 获取源码。

关注微信公众号“捕获异常”,获取最新文章推送,提升你的技能。

捕获异常微信公众号二维码