首页 > 解决方案 > 更改按钮颜色的代码不起作用

问题描述

我有一些代码可以在按钮单击功能本身中更改按钮颜色,效果很好。

_5.Background = new SolidColorBrush(Color.FromArgb(50, 180, 20, 30));

但是,当我尝试使用对象引用从另一个表单调用 _5 时,尽管编译正确,但什么也没有发生。

private void Button_Click_1(object sender, RoutedEventArgs e)
        {           
            MainWindow b = new MainWindow();
            b._5.Background = new SolidColorBrush(Color.FromArgb(50, 180, 20, 30));
        }

有人可以指出我做错了什么吗?

谢谢你。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;



namespace SBI_Mgt_System
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }

        public void _1_Click(object sender, RoutedEventArgs e)
        {            
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();
        }

        public void Button_Click(object sender, RoutedEventArgs e)
        {
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();
        }

        public void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();
        }

        public void Button_Click_2(object sender, RoutedEventArgs e)
        {
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();
        }

        public void Button_Click_3(object sender, RoutedEventArgs e)
        {
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();
        }

        public void Button_Click_4(object sender, RoutedEventArgs e)
        {
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();
        }

        public void Button_Click_5(object sender, RoutedEventArgs e)
        {
            Room1 openRoom = new Room1();
            openRoom.Show();
            rooms x = new rooms();
            x.Show();              
        }
   }
}

另一种形式...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace SBI_Mgt_System
{
    /// <summary>
    /// Interaction logic for rooms.xaml
    /// </summary>

    public partial class rooms : Window
    {
        public static bool res = false;

        public rooms()
        {
            InitializeComponent();    

        }


        private void Button_Click(object sender, RoutedEventArgs e)
        {

            this.Close();
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {           
            MainWindow b = new MainWindow();
            b._5.Background = new SolidColorBrush(Color.FromArgb(50, 180, 20, 30));
        }
    }
}

标签: c#wpf

解决方案


这是你的问题:

MainWindow b = new MainWindow();

您正在创建MainWindow并修改它的新实例,而不是用户实际可见的实例。如果你打电话b.Show(),你会看到新的实例出现。

要做你想做的事,你需要引用已经存在的窗口。在这里,文档Window.Show()可以提供帮助:

通过调用 Show 打开的窗口不会自动与打开它的窗口建立关系;具体来说,打开的窗口不知道是哪个窗口打开的。这种关系可以使用 Owner 属性建立并使用 OwnedWindows 属性进行管理。

从那里我们可以查看文档Window.Owner,其中有一个代码示例。您可以在显示新窗口时执行此操作:

rooms x = new rooms();
x.Owner = this;
x.Show();

这使您可以参考Owner属性中的主窗口。那么,在你的rooms课堂上,你可以这样做:

((MainWindow) Owner)._5.Background = new SolidColorBrush(Color.FromArgb(50, 180, 20, 30));

我假设您实际上是在_5某处声明此属性,因为您没有在代码中显示它。顺便说一句,这是一个可怕的财产名称:)


推荐阅读