Comment afficher Programmatiquement un WPF / C# Windows.Contrôle.L'infobulle?
Il ne semble pas être un .Show() type de méthode pour le Windows.Contrôle.Bulle d'aide, y compris dans ToolTipService.
7 réponses
ce que vous devez faire est de s'assurer que la ToolTip sur le contrôle est de type ToolTip. Ensuite, vous pouvez définir la propriété IsOpen à true comme suit:
ToolTip tooltip = new ToolTip{ Content = "My Tooltip" };
NameTextBox.ToolTip = tooltip;
tooltip.IsOpen = true;
montre à un tooltip ce que vous voulez vraiment faire. Un tooltip a une signification claire pour la plupart des utilisateurs et une attente qu'il disparaît lors du déplacement de la souris (et peut revenir lorsque vous survolez l'élément en question).
si votre but est d'attirer l'attention sur quelque chose, Avez-vous considéré une forme de boîte flottante qui est entièrement sous votre contrôle, WPF rend cela facile!
ToolTip.Show()
est disponible pour les formulaires Windows, pas pour les contrôles WPF.
Pour WPF, si vous voulez simplement afficher le ToolTip lorsque la souris entre dans la zone de contrôle, vous n'avez pas besoin de ToolTip.Show()
si vous écrivez ToolTip=""
dans votre code XAML (du contrôle pour lequel vous voulez le ToolTip) avant le ToolTipOpening
événement dans ce contrôle XAML.
Par exemple, pour un bouton de contrôle:
<Button Name="exampleButton" Content="example" ToolTip="" ToolTipOpening="example_ToolTipOpening"/>
L'Infobulletin doit alors être affiché automatiquement chaque fois que la souris entre dans la zone de cette contrôle. (Vous pouvez définir quel texte afficher dans la fonction d'événement ToolTipOpening. Ou vous pouvez omettre l' ToolTipOpening
et définir le texte dans les guillemets de l' ToolTip=""
)
J'espère que cela vous aidera.
si vous concevez déjà tooltip dans XAML, vous pouvez essayer de cette façon:
((ToolTip)Calendar01.ToolTip).IsOpen = true;
si vous souhaitez contrôler combien de temps le tooltip reste ouvert, vous pouvez vous abonner au Opened
d'événement et de définir un délai avant de fermer l'infobulletin.
Abonnement doit être fait avant IsOpen = true
et il doit être une méthode async pour éviter de raccrocher L'UI.
var tooltip = new ToolTip { Content = "New tooltip text" };
MyControln.ToolTip = tooltip;
tooltip.Opened += async delegate (object o, RoutedEventArgs args)
{
var s = o as ToolTip;
// let the tooltip display for 1 second
await Task.Delay(1000);
s.IsOpen = false;
// wait till the close tooltip animation finishes before changing to old tooltip text
await Task.Delay(1000);
s.Content = "Old tooltip text";
};
tooltip.IsOpen = true;
Enfin j'ai fini avec ça .. et cela fonctionne fantastique ..
Popup myPopup = new Popup();
myPopup.PlacementTarget = control; //FrameworkElement where you want to show this tooltip
myPopup.Placement = PlacementMode.Top;
myPopup.PopupAnimation = PopupAnimation.Slide;
myPopup.AllowsTransparency = true;
TextBlock popupText = new TextBlock();
popupText.Text = ErrorMessage; //Message you want to show
popupText.Background = Brushes.AliceBlue;
popupText.Foreground = Brushes.Red;
//popupText.FontSize = 12;
popupText.TextWrapping = TextWrapping.Wrap;
myPopup.Child = popupText;
// popup1.CustomPopupPlacementCallback =
// new CustomPopupPlacementCallback(placePopup);
//myPopup.HorizontalOffset = control.ActualWidth - popupText.ActualWidth;
control.ToolTip = myPopup;
myPopup.IsOpen = true;
myPopup.StaysOpen = false;