【问题标题】:Having trouble changing buttons background更改按钮背景时遇到问题
【发布时间】:2019-06-26 12:03:40
【问题描述】:

我尝试在单击按钮时更改按钮的背景,但它不会为按钮的背景着色。

我的尝试:

private void Ans1_Click(object sender, RoutedEventArgs e)
{
    //green the correct answer
    Ans1.Background = bc.ConvertFromString("#FF3C9C27") as SolidColorBrush;

    //rest all red
    Ans2.Background = bc.ConvertFromString("#FFAE2F2F") as SolidColorBrush;
    Ans3.Background = bc.ConvertFromString("#FFAE2F2F") as SolidColorBrush;
    Ans4.Background = bc.ConvertFromString("#FFAE2F2F") as SolidColorBrush;

    Thread.Sleep(1500);
}

【问题讨论】:

  • 您好,欢迎来到 SO,请发布更多您的代码,以便我们可以在我们的条件下重试,bc 变量可能是重要的原因。如果有的话,你也可以发布它抛出的错误或异常
  • 为什么Thread.Sleep(...),它会阻止UIThread更新ui(这可能是你的问题)
  • @EmilKasyanov 但由于Thread.Sleep,用户可能看不到任何变化

标签: c# wpf


【解决方案1】:
private void Ans1_Click(object sender, RoutedEventArgs e)
{
     var button = sender as Button; <-- sender is the current button
     button.Background = bc.ConvertFromString("#FF3C9C27") as SolidColorBrush;
}

【讨论】:

    【解决方案2】:

    看来您的转换是问题所在。
    bc.ConvertFromString("#FF3C9C27") 很可能返回 System.Windows.Media.ColorSystem.Windows.Media.Color as SolidColorBrush 但是返回 null。

    这应该会给你想要的结果:

    private void Ans1_Click(object sender, RoutedEventArgs e)
    {
        //green the correct answer
        Ans1.Background = new SolidColorBrush((Color)bc.ConvertFromString("#FF3C9C27"));
    
        //rest all red
        Ans2.Background = new SolidColorBrush((Color)bc.ConvertFromString("#FFAE2F2F"));
        Ans3.Background = new SolidColorBrush((Color)bc.ConvertFromString("#FFAE2F2F"));
        Ans4.Background = new SolidColorBrush((Color)bc.ConvertFromString("#FFAE2F2F"));
    }
    

    关于Thread.Sleep“问题”:您可以改用Timer

    【讨论】:

      【解决方案3】:

      要更改按钮的背景颜色,请在自动生成的 clicked 函数中添加以下代码:

                      Ans1.BackColor = Color.Green;
                      Ans2.BackColor = Color.Red;
                      Ans3.BackColor = Color.Red;
                      Ans4.BackColor = Color.Red;
      

      希望这会有所帮助!

      【讨论】:

      • BackColor 不是 WPF Button 的属性
      • 将背景色改为背景
      • 正如其他 cmets 已经说过的,BackColor 不存在用于 WPF Button,但 Color.Red 也不存在这里。对于System.Windows.Media.Color,预定义颜色为Colors.RedColors.Green 等(也在System.Windows.Media 中)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      相关资源
      最近更新 更多