【问题标题】:WPF - Navigate to different pages inside a frame which is contained in Window?WPF - 导航到窗口中包含的框架内的不同页面?
【发布时间】:2013-12-09 23:47:17
【问题描述】:

我有一个包含框架的主窗口。目的是在一个框架内显示不同的视图(页面)。

<Window>
  <Frame Source="Page1.xaml" />
</Window>

Page1.xaml 属于 Page 类型,并包含一个按钮,例如 Button1。单击 Button1 时,我想导航到 Page2.xaml。但是,以下内容会在运行时中断应用程序:

private void OnButton1Click(object sender, SelectionChangedEventArgs e)
{
   NavigationService.Content = null; //I tried this thinking exception is caused because Page1.xaml is already present in frame. But no luck! :(
   NavigationService.Navigate(new Uri("Page2.xaml", UriKind.Relative));
}

它抛出 XamlParseException 'Set property 'System.Windows.FrameworkElement.Style' 抛出异常。' 内部异常读取 指定元素已经是另一个元素的逻辑子元素。先断开它。

我怀疑这也与样式资源有关,因为如果我在 Page2.xaml 中保留空白网格,则导航不会出现问题。 :-|

编辑:开始将带有样式的元素一一添加到 Page2.xaml 中,并意识到它只有在我添加设置嵌入图像的样式资源时才会中断(图像来自来自单独的 dll、资产)作为按钮内容。有问题的样式在单独的 Style.xaml 文件(资源字典)中定义如下:

<Style x:Key="BackButton" TargetType="Button">
   <Setter Property="Content">
      <Setter.Value>
         <Image Source="/Assets;component/Images/back.png" />
      <Setter.Value>
   </Setter>
</Style>

如果我评论 Setter for Content 属性,导航可以正常工作。因此,作为一个快速解决方案,我在 Page2.xaml 上添加了返回图像作为按钮的直接内容。

【问题讨论】:

  • 您在失败的Style 中声明/引用了哪些资源?

标签: wpf navigation window frame


【解决方案1】:

这是来自工作代码
但它不使用 NavigationService
它直接更新框架

PageDocFieldDetail pageDocFieldDetail = new PageDocFieldDetail();
framePageDocFieldDetail.Content = pageDocFieldDetail;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多