Liaison WPF à l'info-bulle
Pas sûr de quoi faire ici, mais la liaison fonctionne pour l'étiquette dans le modèle de données, mais pas la pointe de l'outil. Toute aide sera appréciée.
<DataTemplate DataType="Label">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<StackPanel.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget,
RelativeSource={x:Static RelativeSource.Self}}">
<TextBlock Text="{Binding Path=DataContext.Description}" />
</ToolTip>
</StackPanel.ToolTip>
<Image Source="{StaticResource ApplicationInfoS}"
Margin="0 0 5 0" Stretch="None"
HorizontalAlignment="Left" />
<Label Style="{StaticResource lblTextContent}"
Padding="5 0 0 0"
Content="{Binding Path=DataContext.Description, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}"/>
</StackPanel>
</DataTemplate>
BTW le DataTemplate est utilisé dans la Listview. Propriété "Description" existe sur le modèle de vue lié à l'affichage de la liste.
J'obtiens le message dans la fenêtre de sortie dans VS2010 est:
Système.De Windows.Erreur de données: 39 : BindingExpression erreur de chemin d'accès: "Description" de la propriété ne se trouvent pas sur l '"objet" "Chaîne" (HashCode=-466763399)'. BindingExpression:Path=DataContext.Description; DataItem='StackPanel' (Name="); élément cible est " TextBlock (Nom="); cible de la propriété est de "Texte" (de type 'String')
Mise à JOUR
J'ai abandonné pour l'instant. À l'aide de la suite de hack pour le moment:
Ajouter une Balise à un StackPanel et Lier "Description"
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Tag="{Binding Path=DataContext.Description, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}">
Lier l'info-bulle pour le Tag. Oui un hack, mais il fonctionne.
<StackPanel.ToolTip>
<ToolTip DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}">
<TextBlock Text="{Binding Path=Tag}" />
</ToolTip>
</StackPanel.ToolTip>
Acclamations
Mike
source d'informationauteur ozczecho | 2010-11-03
Vous devez vous connecter pour publier un commentaire.
Info-bulle ne devrait pas avoir besoin d'un relativesource de liaison. Essayez-le avec pas de contexte de données de liaison
C'est en supposant que le type d'Étiquette que cette DataTemplate est basé sur une propriété appelée Description. Un des rares cas où vous avez besoin de se lier à la PlacementTarget est, dans certains cas, avec un contrôle ContextMenu.
Info-bulle est une fenêtre contextuelle. Parfois, il a besoin d'afficher à côté de votre fenêtre principale de limites. Donc info-bulle ne peut pas être dans votre arborescence visuelle. Si vous regardez son arborescence visuelle de la hiérarchie, vous trouverez que pop-up dispose de son propre visuel de la racine de l'arbre. C'est pourquoi l'info-bulle n'est pas au courant de l'élément de liste du DataContext automatiquement. Maintenant, la question devient comment propager le DataContext de bulle d'aide visuelle de l'arbre. La façon dont vous avez fait preuve dans votre mise à JOUR est une façon de le faire...
J'ai aussi eu des problèmes avec des liaisons dans l'info-bulle, depuis l'encadré d'aide a été définie comme une ressource. J'ai résolu le problème par la création d'un gestionnaire d'événements pour ToolTipOpening événement. Dans la fonction de gestionnaire, vous pouvez ensuite accéder au DataContext de l'élément d'INTERFACE utilisateur et définissez le DataContext de l'info-bulle.
C'était mon XAML:
et c'était mon gestionnaire de code:
Noter que l'info-bulle doit être définie (au moins dans une certaine valeur), sinon le ToolTipOpening événement n'est pas appelé.
Si ce DataTemplate est l'ItemTemplate pour une ListView comme vous le dites, alors vous ne devriez pas besoin de définir le DataContext sur l'info-bulle ni un RelativeSource BindingExpression dans votre Étiquette.Contenu de liaison.
Le DataContext devrait déjà être réglé par la ListView. C'est pourquoi nous utilisons le DataTemplate.
Essayez juste une simple liaison pour chaque: