如何在WPF中操作另一个类中的窗口对象
本文关键字:窗口 对象 另一个 操作 WPF | 更新日期: 2023-09-27 18:06:47
我是WPF和C#的新手。我知道很多VB.NET,我已经习惯了调用文本框等表单对象的方式。我从另一个表单调用它。现在,我使用WPF,我很困惑。因为我有一个主窗口。我想从一个类将和项添加到主窗口的列表框中。在VB.Net中,它就是这样的。
IN FORM2
Form1.Textbox.Text = "";
在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)
{
}