WPF RelativeSource comportement
J'ai quelques problèmes dans la compréhension de RelativeSource
comportement de liaison.
Ci-dessous le code qui lie Label
contenu de StackPanel
Balise correctement:
<Window x:Class="Binding_RelativeSource.MainWindow" Tag="Window Tag">
<Grid Tag="Grid Tag">
<StackPanel Tag="StackPanel Tag" Height="100" HorizontalAlignment="Left" Margin="156,97,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="200">
<Label Content="{Binding Path=Tag,RelativeSource={RelativeSource Mode=FindAncestor,AncestorLevel=1,AncestorType=StackPanel},FallbackValue=BindingFailed}" Height="28" Name="label1" />
</StackPanel>
</Grid>
</Window>
Code ci-dessus ne se lie pas Grid
Tag, si je change AncestorType=Grid
et AncestorLevel=2
.
J'ai 2 questions:
- Je pense que je devrais changer AncestorLevel à 2, à lier à la Grille. Mais il
travaillé pourAncestorLevel=1
. Pourquoi? - Je ne suis pas non plus capable de se lier à l'étiquette de la Fenêtre de la balise.S'il vous plaît suggérer.
OriginalL'auteur WpfBee | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
La
AncestorLevel
est utiliser pour trouver la bonne ancêtre à lier, c'est parce qu'il pourrait y avoir plus d'un ancêtre de ce type.Voici un scénario qui montre cela:
Résultat:
Méthode Alternative
Mais vous pouvez simplifier le code en utilisant
ElementName
de liaison, celui-ci utilise leName
de l'élémentExemple:
Résultat:
Si vous souhaitez lier à la
Window
vous pouvez toujours utiliserFindAncestor
Résultat:
Il fonctionne pour fenêtre,
Content="{Binding Path=Tag,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}
fonctionne très bien iciOh, oui. Il a également travaillé pour moi. Mais il est obligatoire au moment de l'exécution de la fenêtre. Pour la Grille de & StackPanel il le fait au moment de la compilation. Aucune raison spécifique?
Mise à jour de la réponse à montrer ce
Ce que VS version utilisez-vous?
OriginalL'auteur sa_ddam213
Conclusion finale de ma fin: C'était VS2010 concepteur de problème qu'il n'a pas de mise à jour RelativeSource de liaison pour la Fenêtre de la balise. La mise à jour de liaison pour les autres contrôles (j'ai vérifié avec Grille & StackPanel) dans designer, mais pour Winodw il sera mis à jour au moment de l'exécution. Microsoft a fait de la solution de contournement dans VS2012.
OriginalL'auteur WpfBee