Dies ist schwierig, da ToolTip nicht Teil des VisualTree ist. Here Sie sehen eine coole Lösung für das gleiche Problem mit ContextMenus. Genauso können Sie den ToolTip verwenden.
UPDATE
Leider ist die Verbindung weg und ich habe nicht den angegebenen Artikel mehr gefunden.
Soweit ich mich erinnere, hat der referenzierte Blog gezeigt, wie man an einen DataContext eines anderen VisualTree bindet, was oft beim Binden von einer QuickInfo, einem ContextMenu oder einem Popup notwendig ist.
Eine gute Möglichkeit, dies zu tun, ist die gewünschte Instanz (z. B. ViewModel) innerhalb der Tag-Eigenschaft des PlacementTarget bereitzustellen. Das folgende Beispiel macht dies eine Befehls Instanz eines Ansichtsmodell für den Zugriff auf:
<Button Tag="{Binding DataContext,RelativeSource={RelativeSource Mode=Self}}">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Command="{Binding PlacementTarget.Tag.DesiredCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContextMenu}}" .../>
<ContextMenu>
</Button.ContextMenu>
</Button>
ich es nicht getestet und seine lange ich das tat das letzte Mal. Bitte machen Sie einen Kommentar, wenn es nicht für Sie funktioniert.
UPDATE 2
Als Original-Link, dass diese Antwort über gegangen geschrieben wurde, schlug ich archive.org und found the original blog entry. Hier ist sie, wörtlich aus dem Blog:
Da ein ContextMenu in WPF nicht innerhalb der visuellen Struktur existiert von Ihrer Seite/Fenster/Steuerung per se, Bindungsdaten ein wenig schwierig sein kann. Ich habe High und Low über das Internet dafür gesucht, und die meisten gemeinsame Antwort scheint zu sein "tun Sie es einfach in den Code hinter". FALSCH! Ich kam nicht in die wunderbare Welt von XAML zurück zu Dinge im Code hinter zu gehen.
Hier ist mein Beispiel, mit dem Sie an eine Zeichenfolge binden können, die als eine Eigenschaft Ihres Fensters existiert.
public partial class Window1 : Window
{
public Window1()
{
MyString = "Here is my string";
}
public string MyString
{
get;
set;
}
}
<Button Content="Test Button"
Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
<Button.ContextMenu>
<ContextMenu DataContext="{Binding Path=PlacementTarget.Tag,
RelativeSource={RelativeSource Self}}" >
<MenuItem Header="{Binding MyString}"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
Der wichtige Teil ist der Tag auf der Schaltfläche (obwohl Sie genauso leicht die Datacontext der Taste einstellen könnten). Dies speichert einen Verweis auf das übergeordnete Fenster. Das ContextMenu kann über die Eigenschaft PlacementTarget dieses Objekts auf zugreifen. Sie können dann diesen Kontext nach unten durch Ihre Menüpunkte übergeben.
Ich gebe zu, das ist nicht die eleganteste Lösung der Welt. Allerdings ist es besser, Dinge im Code dahinter zu setzen. Wenn jemand eine noch bessere Möglichkeit hat, dies zu tun, würde ich es gerne hören.
Das ist es! Vielen Dank! – Agzam
Diese Verbindung ist tot. Können Sie die fehlenden Informationen ausfüllen? –
@ Bill Ich habe nicht den Link mehr gefunden, aber ich habe versucht, die Art und Weise zu erklären, wie das Problem gelöst werden kann. – HCL