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

时间:2011-08-28 18:03:29

标签: c# wpf vb.net forms

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

    IN FORM2

    Form1.Textbox.Text = "";

其中我无法在WPF中执行此操作。有人可以帮帮我吗。谢谢!

3 个答案:

答案 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)
{

}