Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从wpf中的另一个窗体控制窗体_C#_Wpf - Fatal编程技术网

C# 从wpf中的另一个窗体控制窗体

C# 从wpf中的另一个窗体控制窗体,c#,wpf,C#,Wpf,如何从另一个窗体控制主窗体示例我想从wpf中的另一个窗体访问主窗体中的表?您可以使用UI自动化,它只允许您像用户一样单击/键入控件来与主窗体交互: 或者可以使用代码隐藏将引用从一个窗口传递到另一个窗口,可能是在应用程序类中 没有任何特定于WPF的东西使任何一个选项更容易或更难实现。salamonti, 是否要访问主窗体上的控件或该控件正在显示的数据?如果是后者,我建议您将数据保存在一个单独的区域,而不是显示它的控件。这可以通过MVVM和其他几种视图分离模式来实现。您还可以使用路由事件和路由命令

如何从另一个窗体控制主窗体示例我想从wpf中的另一个窗体访问主窗体中的表?

您可以使用UI自动化,它只允许您像用户一样单击/键入控件来与主窗体交互:

或者可以使用代码隐藏将引用从一个窗口传递到另一个窗口,可能是在应用程序类中

没有任何特定于WPF的东西使任何一个选项更容易或更难实现。

salamonti, 是否要访问主窗体上的控件或该控件正在显示的数据?如果是后者,我建议您将数据保存在一个单独的区域,而不是显示它的控件。这可以通过MVVM和其他几种视图分离模式来实现。您还可以使用路由事件和路由命令以一种形式从另一种形式执行代码


如果要从子窗体访问主窗体,例如,可以在FrameworkElement类型的子窗体上创建属性。然后,在创建子窗体时,只需使用主窗体的实例填充此属性。这样,您就可以访问主窗体中您想要的任何内容。

这是WPF中windows之间通信的一个小示例

您可以按照处理类字段的方式引用控件,因为它们就是这样

public class Form1 : Window
{
    public DateTime FormCreationDate {get; set;}

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Form2 a = new Form2();
        a.Owner = this;
        a.Show();
    }
}


public class Form2 : Window
{
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        this.label1.Content = string.Format(
            "the owner of this window was created on {0}", 
            ((Form1)this.Owner).FormCreationDate.ToString());
    }
}