此项目源码下载地址:https://github.com/lizhiqiang0204/WPF_PageCallWindow
如果Page与Window直接没有任何调用就用这种方法https://www.cnblogs.com/lizhiqiang0204/p/11612383.html就行了,但是如果有调用关系的话,还需在这个方法上进一步增加点内容。
第1步:为每个选项卡添加初始化事件:InitTab1,InitTab2,InitTab3,以及为每个选项卡的Frame起个名字frmPage1,frmPage2,frmPage3.
"Page1" Initialized="InitTab1">
<Frame Name ="frmPage1" Source="/WpfApp1;component/Pages/Page1.xaml"/>
</TabItem>
<TabItem Header="Page2" Initialized="InitTab2">
<Frame Name ="frmPage2" Source="/WpfApp1;component/Pages/Page2.xaml"/>
</TabItem>
<TabItem Header="Page3" Initialized="InitTab3">
<Frame Name ="frmPage3" Source="/WpfApp1;component/Pages/Page3.xaml"/>
</TabItem>
</TabControl>
</Grid>
知识兔第2步:为每个选项卡初始化事件添加初始化内容
private void InitTab1(object sender, EventArgs e)
{
Page1 a = new Page1();
this.frmPage1.Content = a;
a.ParentWindow = this;
}
private void InitTab2(object sender, EventArgs e)
{
Page2 a = new Page2();
this.frmPage2.Content = a;
a.ParentWindow = this;
}
private void InitTab3(object sender, EventArgs e)
{
Page3 a = new Page3();
this.frmPage3.Content = a;
a.ParentWindow = this;
}
知识兔第3步:为每个Page添加父窗体
public partial class Page1 : Page
{
private MainWindow _parentWin;
public MainWindow ParentWindow
{
get { return _parentWin; }
set { _parentWin = value; }
}
public Page1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ParentWindow.Title = "标题1";
ParentWindow.CallFromChild("Page1");
}
}
知识兔因为在选项卡初始化事件中已经将ParentWindow实例化成了MainWindow,(a.ParentWindow = this;这里的this就是MainWindow)所以调用ParentWindow里的属性和方法就等于调用MainWindow里的属性和方法