我有一个页面page在框架中frame,带有frame.DataContext = "foo"。
page
frame
frame.DataContext = "foo"
(page.Parent as Frame).DataContext
"foo"
page.DataContext
null
为什么DataContext不继承?据我了解 Frame 沙箱 的内容。但是我找不到有关此行为的任何文档-有人可以将我指向提及此问题的地方吗?
要回答有关此行为的文档的问题:这不是Microsoft文档,但是我有几本WPF书籍都提到了这一点。
“ Essential Windows Presentation Foundation ”说:(第160-161页)
有两种用于托管可导航内容的有趣模型:隔离托管和集成托管。 使用 隔离的托管 ,内容不受信任,并在完全隔离的(沙盒)环境中运行。这是在系统Web浏览器中作为XAML浏览器应用程序运行时如何托管WPF内容的方式。为了导航到另一个应用程序或HTML内容,该Frame对象支持此隔离的托管模型。 系统 根本不支持 集成托管, 在 集成托管 中我们希望内容充当应用程序的一部分。当Frame导航到应用程序内的内容时,我们得到了孤立行为和集成行为的奇怪混合。Frame将其内容与其样式(及其父代样式)隔离开来,但与应用程序的样式隔离开来。事件不会因其中的内容而冒泡Frame;但是,可以从Content属性访问这些对象(这意味着从安全的角度来看它们不是隔离的)。 由于所有这些原因,Frame当我们使用外部内容时,它最有用,但是可以小心地用于应用程序内容。
有两种用于托管可导航内容的有趣模型:隔离托管和集成托管。
使用 隔离的托管 ,内容不受信任,并在完全隔离的(沙盒)环境中运行。这是在系统Web浏览器中作为XAML浏览器应用程序运行时如何托管WPF内容的方式。为了导航到另一个应用程序或HTML内容,该Frame对象支持此隔离的托管模型。
Frame
系统 根本不支持 集成托管, 在 集成托管 中我们希望内容充当应用程序的一部分。当Frame导航到应用程序内的内容时,我们得到了孤立行为和集成行为的奇怪混合。Frame将其内容与其样式(及其父代样式)隔离开来,但与应用程序的样式隔离开来。事件不会因其中的内容而冒泡Frame;但是,可以从Content属性访问这些对象(这意味着从安全的角度来看它们不是隔离的)。
Content
由于所有这些原因,Frame当我们使用外部内容时,它最有用,但是可以小心地用于应用程序内容。
这就是它的全部内容-与属性继承无关。
“ Windows Presentation Foundation Unleashed说(第95页):
Frame就像所有其他内容控件一样,该控件保留任意内容,但是它将内容与UI的其余部分隔离。例如,通常会在元素树下继承的属性在到达时停止Frame。