Чтобы развить ответ @ Joe-White для тех, кто хочет знать, как сделать Frame
каскад DataContext
, я упомяну, что это также может быть выполнено только в XAML.
<Style TargetType="{x:Type Frame}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Frame}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="PART_FrameCP" DataContext="{TemplateBinding DataContext}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="NavigationUIVisibility" Value="Visible">
<Setter Property="Template" Value="{StaticResource FrameNavChromeTemplateKey}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="JournalOwnership" Value="OwnsJournal"/>
<Condition Property="NavigationUIVisibility" Value="Automatic"/>
</MultiTrigger.Conditions>
<Setter Property="Template" Value="{StaticResource FrameNavChromeTemplateKey}"/>
</MultiTrigger>
</Style.Triggers>
</Style>
Для тех, кто не знаком с WPF, вы можете поместить этот XAML в файл App.xaml
, чтобы он переопределял все элементы управления Frame
в вашем приложении, которые выбирают стиль по умолчанию.Это означает, что вам не нужно писать конкретный код каждый раз, когда вы используете новый Frame
.
. Я использовал Visual Design Studio 2015 Visual Designer (см. Рис. Ниже), чтобы создать большую часть XAML выше изатем добавил DataContext="{TemplateBinding DataContext}"
для выполнения каскада.