c# - 更改按钮颜色的代码不起作用
问题描述
我有一些代码可以在按钮单击功能本身中更改按钮颜色,效果很好。
_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));
}
}
}
解决方案
这是你的问题:
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
某处声明此属性,因为您没有在代码中显示它。顺便说一句,这是一个可怕的财产名称:)
推荐阅读
- html - Angular Table with expandable rows, subscribe and get data on expand row
- python - Draw a white line across a transparent image in Python
- excel - Save filter view Excel 365
- python - I am trying to create a class which takes values of variables while looping through a textfile
- c++ - What is the efficient way to copy vectors of one data type into a vector of struct of the same data type?
- sql - Ruby on Rails - 如何进行自定义查询?
- css - 角度材料自动完成结果列表显示在模态后面?
- java - java.lang.ExceptionInInitializerError 原因:java.lang.IllegalStateException:驱动程序可执行文件的路径必须使用 Selenium 和 Java 设置
- node.js - 在 electron-forge 应用程序中使用 express 提供静态文件
- amazon-web-services - AWS IAM:通过 CLI 报告凭证