WPF - 导航到Window中包含的框架内的不同页面?

时间:2013-11-25 10:33:54

标签: wpf navigation window frame

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

<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'设置属性'System.Windows.FrameworkElement.Style'抛出异常。'内部异常读取 指定的元素已经是另一个元素的逻辑子元素。首先断开连接。

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

编辑 :开始将带有样式的元素逐个添加到Page2.xaml,并意识到只有在添加设置嵌入图像的样式资源时它才会中断(图像来了)来自单独的dll,Assets)作为按钮内容。有问题的样式在下面的单独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上按钮的直接内容。

1 个答案:

答案 0 :(得分:0)

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

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