C# 用于访问其他页面的文本框/对象的强制转换页面

C# 用于访问其他页面的文本框/对象的强制转换页面,c#,wpf,casting,window,C#,Wpf,Casting,Window,以前,我只有一个xaml-文件,这是唯一的窗口,即main窗口。 要从另一个类(显然是一个非静态类)访问任何按钮/文本框/对象,我可以这样强制转换窗口 mainWindow mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(w => w is mainWindow) as mainWindow; 存在一个运行时错误,该错误表示: System.InvalidCastException:类型为

以前,我只有一个
xaml
-文件,这是唯一的窗口,即
main窗口
。 要从另一个类(显然是一个非静态类)访问任何按钮/文本框/对象,我可以这样强制转换窗口

mainWindow mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(w => w is mainWindow) as mainWindow;
存在一个运行时错误,该错误表示:

System.InvalidCastException:类型为“namespace.mainWindows”的对象无法转换为类型为“System.Windows.Controls.Page”的对象


使主窗口返回一个页面,该页面将显示:

public class mainWindow
{
    public Page GetCurrentPage() 
    {
        // return known Page;
    };
}
然后:

mainWindow mainWin = Application.Current.Windows.OfType<mainWindow>().FirstOrDefault();

Page p = mainWin?.GetCurrentPage();
mainWindow mainWin=Application.Current.Windows.OfType().FirstOrDefault();
页面p=mainWin?.GetCurrentPage();

这个对我来说很有用:

主窗口

namespace myName
{
    public partial class main : Window
    {
        public main()
        {
            // ...
        }
    }
}
在主窗口的xaml文件中加载页面的文本框和框架 注意,
FieldModifier
设置为
public

<TextBox x:Name="textbox_main" Text="testString main" x:FieldModifier="public"/>
<Frame x:Name="myFrame" x:FieldModifier="public"/>
<TextBox x:Name="textbox_page" Text="testString page" x:FieldModifier="public"/>
页面的xaml文件中的文本框 注意,
FieldModifier
设置为
public

<TextBox x:Name="textbox_main" Text="testString main" x:FieldModifier="public"/>
<Frame x:Name="myFrame" x:FieldModifier="public"/>
<TextBox x:Name="textbox_page" Text="testString page" x:FieldModifier="public"/>

之后,可以通过以下命令访问任何其他类中的两个文本框(一个直接在窗口中,一个在窗口的页面中):

// get instance of the main-Window
main mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(w => w is main) as main;
// Access objects of the main-Window
Console.WriteLine(mainWin.textbox_main.Text);

// get instance of the current page of the certain frame
myPage page = (myPage)Application.Current.Windows.OfType<main>().FirstOrDefault().myFrame.Content;
// Access objects of the page
Console.WriteLine(page.textbox_page.Text);
//获取主窗口的实例
main mainWin=Application.Current.Windows.Cast().FirstOrDefault(w=>w是main)作为main;
//访问主窗口的对象
Console.WriteLine(mainWin.textbox\u main.Text);
//获取特定框架的当前页面的实例
myPage page=(myPage)Application.Current.Windows.OfType().FirstOrDefault().myFrame.Content;
//访问页面的对象
Console.WriteLine(page.textbox\u page.Text);

页面从不在Application.Current.Windows中。你找不到那样的,但我怎么能找到呢?很好。如何返回当前页面?@Pixel_95,只有您知道在主窗口加载页面的代码。在我通过
mainWindow.Content=new myPage()加载页面后,您没有发布帖子如果您的意思是(页面)this.Content。若页面直接加载到窗口中,框架的用途是什么?