此項目源碼下載地址:https://github.com/lizhiqiang0204/WPF_PageCallWindow
如果Page與Window直接沒有任何調用就用這種方法https://www.cnblogs.com/lizhiqiang0204/p/11612383.html就行了,但是如果有調用關系的話,還需在這個方法上進一步增加點內容。
第1步:為每個選項卡添加初始化事件:InitTab1,InitTab2,InitTab3,以及為每個選項卡的Frame起個名字frmPage1,frmPage2,frmPage3.
<Grid>
<TabControl>
<TabItem Header="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里的屬性和方法
