Pour construire sur @ Joe-blanc de répondre pour ceux qui veulent savoir de façons de faire la Frame
en cascade le DataContext
, je mentionnerai que cela peut également être effectué en XAML seulement.
<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>
Pour ceux qui sont nouveaux à WPF, vous pouvez mettre ce XAML dans le fichier App.xaml
afin qu'il remplace tous Frame
contrôles dans votre application qui ramassent le style par défaut. Cela signifie que vous n'avez pas à écrire de code spécifique derrière chaque fois que vous utilisez un nouveau code Frame
.
J'ai utilisé VisualStudio 2015 Visual Designer (voir l'image ci-dessous) pour créer la majeure partie du code XAML ci-dessus, puis ajouté DataContext="{TemplateBinding DataContext}"
pour effectuer la cascade.
Le BindingExpresion n'est pas passé à l'élément enfant, mais le DataContext est. Avez-vous vérifié la propriété DataContext elle-même? – Carlo
Oui, DataContext est également null. Il reste 'null' même après avoir appelé ClearValue. –
Merci de poser cette question: 0) Comme une note en changeant le datacontext du contrôle utilisateur hébergeant le cadre après que tout a été chargé (* après * l'événement chargé) la page hérite du nouveau datacontext (doit effacer et remettre à zéro à l'original, ou ne pas être défini avant la fin de l'événement chargé). – paulecoyote