如何在WPF中操作另一个类中的窗口对象

本文关键字:窗口 对象 另一个 操作 WPF | 更新日期: 2023-09-27 18:06:47

我是WPF和C#的新手。我知道很多VB.NET,我已经习惯了调用文本框等表单对象的方式。我从另一个表单调用它。现在,我使用WPF,我很困惑。因为我有一个主窗口。我想从一个类将和项添加到主窗口的列表框中。在VB.Net中,它就是这样的。

    IN FORM2
    Form1.Textbox.Text = "";

在WPF中我做不到。有人能帮帮我吗?谢谢!

如何在WPF中操作另一个类中的窗口对象

XAML中定义的WPF窗口具有可从其他类和窗体公开访问的控件,除非您使用x:FieldModifier属性将它们特别标记为private。

因此,如果您使主窗口的实例可在另一个类中访问,无论它是window还是其他任何类,您都可以从第二个类中填充控件。

一种特殊的情况是,当您希望从已打开的子窗口更新主窗口中控件的内容时。在这种情况下,您可以将子窗口的Owner属性设置为当前主窗口,以便在子窗口可见时访问它。例如,假设您定义了以下两个窗口:

// MainWindow
<Window x:Class="TestApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox Name="mainListBox" Height="250" HorizontalAlignment="Stretch" VerticalAlignment="Top"/>
        <Button Content="Open Another Window" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="20" Click="OpenAnotherWindow_Click"/>
    </Grid>
</Window>

// AnotherWindow
<Window x:Class="TestApplication.AnotherWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="AnotherWindow" Height="300" Width="300">
    <Grid>
        <Button Content="Add New Item to Main Window" HorizontalAlignment="Center" VerticalAlignment="Center" Click="AddNewItem_Click"/>
    </Grid>
</Window>

每个都在其自己的XAML文件中。

MainWindow的代码隐藏中,在按钮单击处理程序中,您将AnotherWindow的实例显示为对话框,并将其Owner属性设置为MainWindow的实例:

private void OpenAnotherWindow_Click(object sender, RoutedEventArgs e)
{
    AnotherWindow anotherWindow = new AnotherWindow();
    anotherWindow.Owner = this;
    anotherWindow.ShowDialog();
}

现在,您可以从AnotherWindow的Owner属性访问MainWindow的实例,以便在AnotherWindow代码后面的按钮单击处理程序中向其上定义的ListBox控件添加新项:

private void AddNewItem_Click(object sender, RoutedEventArgs e)
{
     MainWindow mainWindow = Owner as MainWindow;
     mainWindow.mainListBox.Items.Add(new Random().Next(1000).ToString());
}

它只是在ListBox中添加一个新的随机数,以显示代码如何访问和修改MainWindow中的控件数据。

纯WPF解决方案,但在您的情况下可能最简单,就是在WPF中使用数据绑定。

每个表单的控件都绑定到ModelView上的一些数据(纯MVVM方法(或数据(或多或少像yuo在WindowsForms中可以做到的那样(。因此,您所要做的"唯一"的事情就是读取/写入绑定到该表单UI上的控件的数据

例如,您在Windows上有TextBox,并且希望从中读取数据。该TextBox绑定到类的某个string属性,该属性负责保存该表单上控件的数据(仅举一个例子,在现实世界中,根据开发人员的决定,可能有1000个其他解决方案(。因此,您需要的是而不是说:"window give textbox",在读取TextBox's内容后,只读取绑定的string属性。

当然,这只是对一种东西的简单描述。但只是给你一个提示。按照上面提供的数据绑定链接来了解更多关于这个东西的信息。不要害怕那里有很多东西,毕竟这不是一个复杂的想法,也很直观。为了让这些东西在简单的情况下发挥作用,你不需要我付出巨大的努力。当你最终进入现实世界的应用程序时,这些东西会变得非常复杂。

这将获得所有活动窗口:

foreach (Window item in Application.Current.Windows)
{
}