XAML 如何从另一个C#文件更改UI元素的属性?

cxfofazt  于 2023-02-17  发布在  C#
关注(0)|答案(1)|浏览(191)

我有一个包含MainWindow.xaml、MainWindow.xaml.cs和Helper.cs文件的程序。所有UI都在.xaml文件中,只能从. xaml.cs文件访问。但现在我想将MainWindow.xaml文件中TextBox中的文本从Helper.cs文件中更改,这是完全独立的。
我试过在MainWindow.xaml.cs中创建一个函数来实现这一点:

public void SetRNrInfoText(string value)
{
    this.RNrInfoTextBox.Text = value;
}

public string RNrInfoText
{
    get { return this.RNrInfoTextBox.Text; }
    set { this.RNrInfoTextBox.Text = value; }
}

在Helper.cs文件中,我用途:

public static void searchByRNR()
{
    MainWindow mainWindow = new MainWindow();
    mainWindow.SetRNrInfoText("new text"); 
}

但是,当我尝试调用这个searchByRNR函数时,什么也没有发生,在.xaml文件中,“x:FieldModifier”被设置为“public”。
目前,我唯一的想法是让Helper返回一个字典或数组,然后在MainWindow中,将所有值设置为特定的文本框,但我真的不喜欢这个想法。
所以问题是,我能不能以某种方式更改另一个.cs文件中的.xaml元素的属性,还是不可能?”

qhhrdooz

qhhrdooz1#

MainWindow mainWindow = new MainWindow();创建了MainWindow类的新示例,但这不是您想要的。
您需要以某种方式获取对Helper类中已经存在的MainWindow示例的引用。
最简单的方法可能是将App.xaml.csm_window字段的修饰符更改为建议的here
然后,您可以在Helper类中获取对该窗口的引用,如下所示:

public static void searchByRNR()
{
    MainWindow mainWindow = (Application.Current as App)?.m_window as MainWindow; 
    mainWindow.SetRNrInfoText("new text"); 
}

相关问题