Guten Tag,
da du ja deine gefundene Lösung nicht veröffentlicht hast, würde ich das
hier gerne nachholen, damit jemand anderes eventuell auch etwas mit der
Lösung anfangen kann.
Warum du genau über Reflection arbeiten willst, kann ich mir
ehrlichgesagt nicht genau erklären - manchmal gibt es dafür Gründe (z.B.
Manipulationen an Paketen, die vom Zugang sehr beschränkt sind), aber
oft existieren auch andere Wege, um zum gewünschten Ziel zu kommen.
Meine primäre Vermutung ist, dass du hier versuchst, dem Button eine
Control als ToolTip zuzuweisen und diesen programmatisch zu öffnen. Dein
Fehler wird vermutlich darin liegen, dass du der "ToolTip"-Property des
Buttons direkt die besagte Control zuweist, anstatt diese in einen
ToolTip (eine ContentControl extra zu diesem Zweck) zu wrappen:
1 | ToolTip toolTip = new ToolTip()
|
2 | {
|
3 | // Content kann hier beliebig gesetzt werden, z.B.
|
4 | // Content = "Das steht im ToolTip"
|
5 |
|
6 | Content = new TextBlock()
|
7 | {
|
8 | Text = "Das steht im ToolTip"
|
9 | }
|
10 | };
|
11 |
|
12 | AssociatedObject.SetValue(ToolTipProperty, toolTip);
|
13 | // AssociatedObject.ToolTip = toolTip; // Das funktioniert uebrigens auch
|
Wenn du jetzt später auf den ToolTip zugreifen willst, kannst du
folgende Syntax verwenden:
1 | if (AssociatedObject.ToolTip is ToolTip _toolTip)
|
2 | _toolTip.IsOpen = true;
|
Willst du außerdem noch Position und Anzeigedauer des ToolTips
manipulieren, so kannst du mit den anderen Properties von ToolTip
arbeiten:
1 | if (AssociatedObject.ToolTip is ToolTip _toolTip)
|
2 | {
|
3 | // setzt das UIElement, worauf sich die Position bezieht
|
4 | _toolTip.PlacementTarget = AssociatedObject;
|
5 |
|
6 | // setzt die "Richtung" der Positionierung: in diesem Fall unter dem "Target"
|
7 | _toolTip.Placement = System.Windows.Controls.Primitives.PlacementMode.Bottom;
|
8 |
|
9 | // ist diese Property true, so schliesst der ToolTip erst nach dem naechsten Click des Nutzers
|
10 | _toolTip.StaysOpen = true;
|
11 |
|
12 | _toolTip.IsOpen = true;
|
13 | }
|
Begründung:
Wie du eventuell siehst, hat
1 | FrameworkElement.ToolTip
|
den Typ
. Direkte Zuweisungen zum gewünschten "Content" sind also erlaubt (in
dem Fall kümmert sich, soweit ich das verstanden habe, eine interne
ContentControl um die Darstellung). Gleichzeitig gibt man damit aber
auch ein Stück weit die Kontrolle ab, die du (so vermute ich) über
Reflection zurückgewinnen wolltest.
Grüße