我是WPF和C#的新手。我知道很多VB.NET,当我调用像textboxes等表单对象时,我习惯了这种方式。我从另一种形式调用它。现在,我正在使用WPF,我很困惑。因为我有一个主窗口。我想从类中添加和添加到主窗口中的列表框。在VB.Net中,就像这样。
IN FORM2
Form1.Textbox.Text = "";
其中我无法在WPF中执行此操作。有人可以帮帮我吗。谢谢!
答案 0 :(得分:2)
XAML中定义的WPF窗口可以从其他类和表单公开访问其控件,除非您使用x:FieldModifier属性将其标记为私有。
因此,如果您在另一个类中创建主窗口的实例,无论是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();
}
现在,您可以从MainWindow
的所有者属性访问AnotherWindow
的实例,以便在按钮中为其上定义的ListBox
控件添加新项目点击后面AnotherWindow
代码中的处理程序:
private void AddNewItem_Click(object sender, RoutedEventArgs e)
{
MainWindow mainWindow = Owner as MainWindow;
mainWindow.mainListBox.Items.Add(new Random().Next(1000).ToString());
}
它只是向ListBox
添加了一个新的随机数,以便显示代码如何在MainWindow
中访问和修改控件的数据。
答案 1 :(得分:0)
Pure WPF解决方案,但在您的情况下可能最简单,使用Data Binding in WPF。
每个表单的控件都绑定到ModelView上的某些数据(纯MVVM方法)或数据(或多或少像yuo可以在WindowsForms中执行)。因此,您必须做的“唯一”事情是读取/写入绑定到该窗体的UI上的控件的数据。
例如,您在Windows上有TextBox
并希望从中读取数据。
这个TextBox
绑定到类的某个string
属性,该属性负责保存该表单上控件的数据(仅举一个例子,在现实世界中可能有1000个其他解决方案,基于开发人员的决策)。所以你需要的是不说:“窗口给文本框”,在阅读TextBox's
内容之后,但是只需读取绑定的string
属性。
当然,这只是一个简单的描述。但只是给你一个提示。按照上面提供的数据绑定链接了解有关此内容的更多信息。不要害怕那里的很多东西,毕竟这不是一个复杂的想法,而且非常直观。为了使这些东西在简单的情况下工作,你不需要我做出巨大的努力。当你最终进入现实世界的应用程序时,这些东西变得非常复杂。
答案 2 :(得分:0)
这将获得所有活动窗口:
foreach (Window item in Application.Current.Windows)
{
}