Я вижу, вы уже поняли, что ключ JournalOwnership
здесь.Но только для большей предыстории, так что это менее волшебный и более сложный алгоритм, вот как Navigation Framework определяет, нужно ли интегрироваться с журналом браузера, на основе того, что для Frame.JournalOwnership
установлено.
JournalOwnership.Automatic
(по умолчанию) - если Frame
является «верхним уровнем» Frame
, он будет перемещаться по журналу браузера.Если это не так, то не будет.«Верхний уровень» означает, что если он поднимается по визуальному дереву, он не находит никаких других Frame
по пути.
JournalOwnership.OwnsJournal
- Frame
всегда будет иметь собственный журнал и не будет пытатьсявзаимодействовать с журналом браузера.
JournalOwnership.UsesParentJournal
- Frame
всегда будет интегрироваться с браузером.Если это не верхний уровень Frame
, это вызывает исключение.
Что интересно в ChildWindow, так это то, что когда Frame
поднимается по визуальному дереву, чтобы увидеть, является ли он верхним уровнем"Frame
, он не найдет его (потому что Popup
не имеет корня в визуальном дереве таким же образом, а ChildWindow
использует Popup
).Следовательно, он будет думать, что это верхний уровень (что может быть не совсем правильно в данном случае, но что еще он может сделать?), Поэтому он будет интегрирован с журналом браузера.