首页 > 解决方案 > 当其他按钮处于活动状态时,按钮/更改边框颜色 C# 设置回默认值

问题描述

我有三个按钮。一旦我单击一个,它将其边框颜色更改为不同的颜色并显示其活动状态,但要将其设置为默认值,我必须再次单击该按钮。所有这三个按钮都代表不同的动作,它们不能为用户同时运行。如果单击按钮 2,您知道如何设置回按钮 1 的默认边框颜色吗?

在 xamarin 中创建了我的 bytton,这是背后的代码。

我试图为此创建一个单独的方法,但我找不到按钮。

 protected void EnglishToCzech_Clicked(object sender, EventArgs e)
 {
     Button englishtoczech = (Button)sender;
     if (englishtoczech.BorderColor.Equals(Color.Default)) 
         english.BorderColor = Color.FromHex("#da2c43");
     else 
         englishtoczech.BorderColor = Color.Default;  
 }

 protected void CzechToEnglish_Clicked(object sender, EventArgs e)
 {
     Button czechtoenglish = (Button)sender;
     if (czechtoenglish.BorderColor.Equals(Color.Default)) 
         english.BorderColor = Color.FromHex("#da2c43");
     else
         czechtoenglish.BorderColor = Color.Default;
 }

 protected  void English_Clicked(object sender, EventArgs e)
 {
     Button english = (Button)sender;
     if (english.BorderColor.Equals(Color.Default))
         english.BorderColor = Color.FromHex("#da2c43");
     else
         english.BorderColor = Color.Default;
 }

标签: c#xamarin

解决方案


好的,如果我理解正确,您可以在每次点击时重置所有颜色。首先,您需要为按钮分配名称。如果您使用 XAML 添加x:Name属性并为它们命名。我想你给它们起名字,englishtoczech但你可以给它们起任何名字。惯例是骆驼案。然后你可以像这样在你的代码中使用它们:czechtoenglishenglish

 protected void EnglishToCzech_Clicked(object sender, EventArgs e)
 {
     if (englishtoczech.BorderColor.Equals(Color.Default))
     {
         englishtoczech.BorderColor = Color.FromHex("#da2c43");
         czechtoenglish.BorderColor = Color.Default;
         english.BorderColor = Color.Default;
     }
     else 
         englishtoczech.BorderColor = Color.Default;  
 }

 protected void CzechToEnglish_Clicked(object sender, EventArgs e)
 {
     if (czechtoenglish.BorderColor.Equals(Color.Default)) 
     {
         czechtoenglish.BorderColor = Color.FromHex("#da2c43");
         englishtoczech.BorderColor = Color.Default; 
         english.BorderColor = Color.Default;
     }
     else
         czechtoenglish.BorderColor = Color.Default;
 }

 protected void English_Clicked(object sender, EventArgs e)
 {
     if (english.BorderColor.Equals(Color.Default))
     {
         english.BorderColor = Color.FromHex("#da2c43");
         englishtoczech.BorderColor = Color.Default; 
         czechtoenglish.BorderColor = Color.Default;
     }
     else
         english.BorderColor = Color.Default;
 }

这是一个非常简单的方法,但是您应该考虑两件事:

  1. 你不应该在按钮边框颜色上构建你的逻辑,最好有一些变量来保存系统的状态。

  2. 在更高级的场景中,如果您是专业人士,我强烈建议您阅读 MVVM 并在 Xamarin 项目中尝试。这让你的生活更轻松

让我详细说明第一点。

您将在此处设置边框颜色,但没有任何反应。我想稍后在另一个事件中,您将检查按钮的边框颜色并对其进行一些逻辑处理。

这样,您就可以在边框颜色上构建逻辑。您可以创建一个enum

public enum State
{
    None,
    English,
    EnglishToCzech,
    CzechToEnglish
}

然后在您的代码 bihind 添加该枚举的变量

private State state = State.None;

最后相应地设置每个按钮单击的状态。

这只是一个例子,希望对您有所帮助。


推荐阅读