Je voudrais faire une info-bulle de texte visible de manière conditionnelle.
J'ai la totalité définie comme suit: p> Où serait la propriété de visibilité dans cette définition? Il ne semble pas aimer aucune de mes suppositions. P> Il y a quelques suggestions de travailler avec la visibilité de la grille. Le problème de cette approche fait que la grille invisible montrera toujours une boîte à outils vide. C'est pourquoi j'essaie de contrôler la visibilité de l'info-bulle. p> p>
9 Réponses :
Vous devez définir la visibilité sur la grille:
<Window.Resources> <BooleanToVisibilityConverter x:Key="visibilityConverter" /> </Window.Resources> ... <Grid Visibility="{Binding IsToolTipVisible, Converter={StaticResource visibilityConverter}}> ... </Grid>
Vous allez ici;
<TextBlock Text="Dummy text"> <TextBlock.ToolTip> <ToolTip Visibility="Collapsed"> <TextBlock Text="Text tooltip"></TextBlock> </ToolTip> </TextBlock.ToolTip> </TextBlock>
Je voudrais contrôler la visibilité de l'info-bulle. Si je fais la grille invisible, il montrera toujours un cadre d'info-bulle vide.
Essayez-le dans TextBlock comme "
Je ne veux pas faire invisible le texte de texte invisible. juste l'info-bulle
Ce n'est pas légal xaml ... Vous ne pouvez pas mettre une propriété sur
Essayez ceci. Il ne laissera pas de cadre vide.
Si vous ne voulez pas que l'info-bulle affiche le cadre vide. Vous devez créer une boîte à outils séparée ControlTemplate avec toutes vos grilles et des blocs de texte requis et attribuez-le au modèle d'info-bulle. Cela pourrait vous aider à résoudre le problème du cadre vide. P>
+1 semble une meilleure approche que de le faire sans le modèle et avoir une redondance.
Pas besoin de çà; Il suffit de lier la propriété ToolBlock (ou d'un autre contrôle) de TextBlock.
Je me rends compte que cela a un an, mais vous pouvez y accomplir cela dans le code - derrière.
Visibility = "{Binding showControl}"
C'est ce que ToolTipService.Seuville est pour ... juste lier cela. Pas besoin de code - derrière ou aucun de ces autres shenanigans.
Le texte de texte avec son outil:
[ValueConversion(typeof(string), typeof(Visibility))] public class StringToVisibilityConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if(value is string) { var stringValue = value as string; if(!String.IsNullOrEmpty(stringValue)) return Visibility.Visible; } return Visibility.Hidden; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }
L'info-bulle de l'OP est une grille, ce n'est donc pas pertinent. La bonne façon de contrôler la visibilité de l'info-bulle est via ToolTipService.EnEnabled.
Que diriez-vous de créer un style personnalisé pour une info-bulle? De cette façon, vous pouvez réutiliser la même fonctionnalité à plusieurs endroits avec un code minimal avec un code minimal.
Ajoutez ceci à un dossier et incluez-le où vous souhaitez surveiller le comportement de la boîte à outils par défaut - P>
[ValueConversion(typeof(object), typeof(string))] public class ToolTipContentConverter : MarkupExtension, IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value ?? string.Empty; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public override object ProvideValue(IServiceProvider serviceProvider) { return this; } }
La totalité de l'OP est une grille, pas une chaîne.
Exemple: je veux stocker des informations sur la ligne et ajouter à ma toile
Cela ne répond pas à la question.
Une solution beaucoup plus simple que les autres réponses: où maketooltipisible code> est votre propriété. p> p>