Comment lier une Propriété de Dépendance à quoi que ce soit dans le XAML
(À l'aide de Silverlight 4.0 et VS 2010)
J'ai donc créé une propriété appelée Rank
dans mon fichier C#. Comment puis-je maintenant un lien à un contrôle dans le contrôle UserControl fichier xaml?
Mon code: (TopicListItem.xaml.cs)
#region Rank (DependencyProperty)
///<summary>
///Rank
///</summary>
public int Rank
{
get { return (int)GetValue(RankProperty); }
set { SetValue(RankProperty, value); }
}
public static readonly DependencyProperty RankProperty =
DependencyProperty.Register("Rank", typeof(int), typeof(TopicListItem),
new PropertyMetadata(0, new PropertyChangedCallback(OnRankChanged)));
private static void OnRankChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((TopicListItem)d).OnRankChanged(e);
}
protected virtual void OnRankChanged(DependencyPropertyChangedEventArgs e)
{
}
#endregion Rank (DependencyProperty)
Je veux faire dans mon TopicListItem.xaml
...
<Textblock Text="{TemplateBinding Rank}"/>
...
mais qui ne fonctionne pas vraiment.
OriginalL'auteur JeroenEijkhof | 2010-07-09
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de lier une propriété dans un Usercontrol xaml pour une propriété exposée par le même UserControl puis utilisez le modèle suivant:-
Noter que de ce fait l'hypothèse que la racine de l'élément de contenu à l'intérieur de l'objet UserControl a été donné le nom de "LayoutRoot".
Merci Anthony...ce réellement travaillé tout Akash n'ont pas ceux de la lecture de cette s'il vous plaît voir les commentaires sur le Akash réponse pour la raison pour laquelle son échec. Cette UserControl était en fait un enfant et une partie de la liste...merci encore 🙂
Anthony, j'aimerais en savoir plus à ce sujet et plus précisément de ce que la logique/raison derrière certaines choses comme
Parent.
etElementName=
...merci!En fait pour ce particulier de contrôle, il a travaillé sans l'aide de la
Parent.
dans le chemin d'accès. Il l'a trouvé, de toute façon.OriginalL'auteur AnthonyWJones
Vous devez définir ElementName à x:Nom de l'objet UserControl, si x:Name est vide, en définir un.
UserControl
est toujours utilisé comme un RootVisual ou de naviguer de page. Toutefois, si son utilisation par un enfant de contrôle de cette approche est susceptible de faire échouer depuis leUserControl
nom peut être attribué par l'extérieur xaml.Je n'ai pas remarqué de telles choses, d'autres de façon à spécifier par rapport à la source comme l'auto.
Cela n'a pas fonctionné depuis le nom doit être à la racine UIElement dans le UserControl pas sur le UserControl lui-même.
Sur la recherche et l'expérimentation, cela a effectivement fonctionné. Mais pas si le
Parent.
chemin syntaxe est utilisée. Donc, il semble queElementName
définit le chemin d'accès doit démarrer....OriginalL'auteur Akash Kava
Vous devez utiliser Contraignant, objet templatebinding,
Aussi, vous voudrez peut-être regarder dans la façon d'obtenir de liaison erreurs signalées à vous - très utile comportement par défaut dans WPF est de vous laisser deviner au sujet de problèmes de liaison, mais vous pouvez réellement obtenir de nombreuses informations utiles si vous le mettez sur.
Dans VS2010 il y a des options dans Outils -> Options -> Débogage -> Fenêtre de Sortie. Pas sûr au sujet des versions antérieures, mais vous pouvez activer jusqu'à la mèche dans le code en utilisant PresentationTraceSources - c'est probablement une bonne durée de Google.
OriginalL'auteur Will Dean
probablement
<Textblock Text="{Binding Rank}"/>
.ElementName=...
nécessaire.OriginalL'auteur Femaref