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。若页面直接加载到窗口中,框架的用途是什么?