android Visual Studio 2022 MAUI -按钮按下和释放效果

ktca8awb  于 2023-09-28  发布在  Android
关注(0)|答案(2)|浏览(233)

我试图创建简单的按钮,根据状态的不同,有不同的外观,一个经典的windows窗体按钮,但我找不到简单的方法来做MAUI。
到目前为止,我做了以下工作:

  • 在xaml中用默认颜色定义按钮

<Button Text="POSITIVE" x:Name="positive" IsEnabled="True" VerticalOptions="Center" HorizontalOptions="CenterAndExpand" BackgroundColor="DarkGray"/>

  • 我创建了一个变量来跟踪按钮的状态

public bool isPositivePressed = false;

  • 在main函数中,我定义了单击操作的处理程序
positive.Clicked += (sender, args) =>
{
    isPositivePressed = !isPositivePressed;
    UpdateButtonVisualState(positive, isPositivePressed);
};
  • 最后,该函数将根据参数传递的按钮的状态来改变按钮的颜色。

private void UpdateButtonVisualState(Button button,bool state){ button.BackgroundColor = state?颜色。来自Rgb(81,43,212):颜色。深灰色; }
此代码在Android模拟器中工作,但在真实的的Android手机中不工作。
有人能给我指出一个更好的和一致的方法来实现同样的行为吗?
谢谢

jmp7cifd

jmp7cifd1#

如果我理解正确的话,你是想根据某个ViewModel的状态来做这件事,还是更多地围绕它当前是否被按下?如果是后者,希望下面的答案能有所帮助:)
实现此目的的一种方法是使用VisualStateManager样式(参见.NET Maui文档中的visual states)。我将可视化状态理解为一种“从代码中对UI进行可视化更改”的方法,允许您完全自定义Maui组件。
如果您希望以编程方式(即在C#代码后面)执行此操作,请 checkout 定义自定义视觉状态文档。
作为一个例子,下面我在ContentPage.Resources中定义了视觉状态,但是你可以实现相同的逻辑,内联每个按钮,或者通过Styles.xaml。在这个例子中,我只是在按钮被“按下”时更新按钮BackgroundColor

<ContentPage.Resources>
    <Style TargetType="Button">
        <Setter Property="BackgroundColor"
                Value="White" />

        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled" />
                    <VisualState x:Name="Pressed">
                        <!-- define your custom 'pressed' styles here -->
                        <VisualState.Setters>
                            <Setter Property="BackgroundColor"
                                    Value="Orange" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>
</ContentPage.Resources>
mrphzbgm

mrphzbgm2#

您可以使用按钮的按下和释放方法。
下面是你可以在.xaml中引用的代码:

<Button Text="Press to Rotate Text!"
                VerticalOptions="Center"
                HorizontalOptions="Center"
                Pressed="Button_Pressed"
                Released="Button_Released" />

下面是后面代码中的代码。

private void Button_Pressed(object sender, EventArgs e)
    {
            Button button = (Button)sender;
            button.BackgroundColor = Colors.AliceBlue;
    }

    private void Button_Released(object sender, EventArgs e)
    {
            Button btn = (Button)sender;
            btn.BackgroundColor = Colors.BlueViolet;
    }

相关问题