一尘不染

page.DataContext是否不从父框架继承?

c#

我有一个页面page在框架中frame,带有frame.DataContext = "foo"

  • (page.Parent as Frame).DataContext"foo"
  • BindingExpression的page.DataContextIS null(也被迫与ClearValue)。
  • page.DataContextnull但我期望“ foo”!

为什么DataContext不继承?据我了解 Frame 沙箱
的内容。但是我找不到有关此行为的任何文档-有人可以将我指向提及此问题的地方吗?


阅读 320

收藏
2020-05-19

共1个答案

一尘不染

要回答有关此行为的文档的问题:这不是Microsoft文档,但是我有几本WPF书籍都提到了这一点。

Essential Windows Presentation
Foundation

”说:(第160-161页)

有两种用于托管可导航内容的有趣模型:隔离托管和集成托管。

使用 隔离的托管
,内容不受信任,并在完全隔离的(沙盒)环境中运行。这是在系统Web浏览器中作为XAML浏览器应用程序运行时如何托管WPF内容的方式。为了导航到另一个应用程序或HTML内容,该Frame对象支持此隔离的托管模型。

系统 根本不支持 集成托管,集成托管
中我们希望内容充当应用程序的一部分。当Frame导航到应用程序内的内容时,我们得到了孤立行为和集成行为的奇怪混合。Frame将其内容与其样式(及其父代样式)隔离开来,但与应用程序的样式隔离开来。事件不会因其中的内容而冒泡Frame;但是,可以从Content属性访问这些对象(这意味着从安全的角度来看它们不是隔离的)。

由于所有这些原因,Frame当我们使用外部内容时,它最有用,但是可以小心地用于应用程序内容。

这就是它的全部内容-与属性继承无关。

Windows Presentation Foundation
Unleashed
说(第95页):

Frame就像所有其他内容控件一样,该控件保留任意内容,但是它将内容与UI的其余部分隔离。例如,通常会在元素树下继承的属性在到达时停止Frame

2020-05-19