如果您的 Page1 标题是动态生成的(“Customer
Joe Smith
Details”),您可能在 Page1ViewModel 上有一个名为 Title 的属性。在这种情况下,您可以简单地从主窗口绑定到框架的内容的 DataContext:
<Window
Title="{Binding ElementName=mainFrame, Path=Content.DataContext.Title}">
<Grid>
<Frame x:Name="mainFrame" Source="/Page1.xaml" />
</Grid>
</Window>
如果您的 Page1 标题是静态文本(使用 Title 而不是 WindowTitle 属性),则只需从主窗口直接绑定到它:
<Window
Title="{Binding ElementName=mainFrame, Path=Content.Title}">
<Grid>
<Frame x:Name="mainFrame" Source="/Page1.xaml" />
</Grid>
</Window>
上面的内容对我不起作用,因为它在运行应用程序时加载了 [myPage1]。 我通过单击 MainWindow 上的按钮显示 [myPage1],以便显示带有静态标题的页面,我将所需的标题文本添加到导航中。
主窗口.xaml
<DockPanel> <Frame x:Name="_mainFrame"/> </DockPanel>
button_click方法中的MainWindow.xaml.cs
_mainFrame.NavigationService.Navigate(new [myPage1] (Title= "what ever you want displayed"));
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
this.Title = newContent is not Page page || string.IsNullOrWhiteSpace(page.Title) ? this.ViewModel.Title : page.Title;
}
我到目前为止使用这个没有任何问题。如果没有导航到页面,它有一个后备。您可能可能想更改视图模型,但是您还需要单独存储默认标题。使其与框架一起使用可能也不太难。
this.Title = "Sample_Window-Page1";
你能试试这个吗?框架不会更改窗口,因此标题会保留,您应该在每次页面更改时更新窗口标题。