WPF:更改每个页面导航上的窗口标题

问题描述 投票:0回答:4
c# wpf xaml window
4个回答
5
投票

如果您的 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>

0
投票

上面的内容对我不起作用,因为它在运行应用程序时加载了 [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"));

0
投票
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;
}

我到目前为止使用这个没有任何问题。如果没有导航到页面,它有一个后备。您可能可能想更改视图模型,但是您还需要单独存储默认标题。使其与框架一起使用可能也不太难。


-2
投票
this.Title = "Sample_Window-Page1";

你能试试这个吗?框架不会更改窗口,因此标题会保留,您应该在每次页面更改时更新窗口标题。

© www.soinside.com 2019 - 2024. All rights reserved.