从另一个窗口访问和更改 WPF 中的控件

Posted

技术标签:

【中文标题】从另一个窗口访问和更改 WPF 中的控件【英文标题】:Access and change a control in WPF from another window 【发布时间】:2021-08-16 17:45:55 【问题描述】:

MainWindow.xaml 中,我有一个名为 tbName 的文本框。在它下面我有一个带有 OnClickEvent 的按钮。我想在另一个名为 EmployeeRank1 的窗口中设置名为 welcomeRank1Tb 的 TextBlock 的文本,并在 tbName 文本框中输入文本。如何从 MainWindow.xaml.cs 访问 welcomeRank1Tb 并将其值设置为 tbName 中输入的值?

private void EmployeeRank1Button_Click(object sender, RoutedEventArgs e)
    
        // creat SqlConnection, SqlCommand and SqlDataReader instances
        SqlConnection con;
        SqlCommand cmd;
        SqlDataReader reader;

        // try-catch block that looks for match between input and database information for EmployeeRank1
        try
        
            string connectionString = ConfigurationManager.ConnectionStrings["CompanyManagementSystemm.Properties.Settings.ZaimovDBConnectionString"].ConnectionString;

            // create a query and select just the record we need 
            string query = "select * from EmployeeRank1 where Name = @name AND Password = @pass";

            // A local sqlconnection in a using statement ensure proper disposal at the end of this code 
            con = new SqlConnection(connectionString);
            con.Open();

            // Let the database do the work to search for the password and name pair
            cmd = new SqlCommand(query, con);
            cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = tbName.Text;
            cmd.Parameters.Add("@pass", SqlDbType.NVarChar).Value = pbPassword.Password;
            reader = cmd.ExecuteReader();

            // If the reader has rows then the user/pass exists in the db table
            if (reader.HasRows)
            
                EmployeeRank1 employeeRank1 = new EmployeeRank1();
                employeeRank1.Show();
            
            else
            
                NamePassNotMatchFrame.Content = new NamePassNotMatch();
            
        
        // catch a potential exception
        catch (Exception exception)
        
            MessageBox.Show(exception.ToString());
        

我想更改if (reader.HasRows) 语句中welcomeRank1Tb 的值

【问题讨论】:

这不是一个直接的答案,但我建议使用绑定并在各个视图模型之间进行这样的操作。从另一个窗口修改一个窗口听起来像是代码异味。 创建窗口后立即设置?:employeeRank1.welcomeRank1Tb.Text = tbName.Text @mm8 确实有效。我不知道为什么我什至不认为它是一种选择,即使它是合乎逻辑的。谢谢! 【参考方案1】:

您可以在创建窗口后立即设置:

employeeRank1.welcomeRank1Tb.Text = tbName.Text;

【讨论】:

以上是关于从另一个窗口访问和更改 WPF 中的控件的主要内容,如果未能解决你的问题,请参考以下文章

WPF中窗口控件的跨线程调用

从另一类 Windows 手机访问页面的按钮控件?

Visual MFC - 从另一个类访问编辑控件

如何从 UserControl 访问 WPF 页面中的公共变量?

UserControl在wpf中使用父元素?

如何从另一个类访问 Winform 文本框控件?