9
votes

Ajout de la visibilité conditionnelle à l'info-bulle de contrôle WPF

Je voudrais faire une info-bulle de texte visible de manière conditionnelle.

J'ai la totalité définie comme suit: xxx

Où serait la propriété de visibilité dans cette définition? Il ne semble pas aimer aucune de mes suppositions.

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.


0 commentaires

9 Réponses :


1
votes

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>


0 commentaires

4
votes

Vous allez ici;

   <TextBlock Text="Dummy text">
        <TextBlock.ToolTip>
            <ToolTip Visibility="Collapsed">
                <TextBlock Text="Text tooltip"></TextBlock>
            </ToolTip>                
        </TextBlock.ToolTip>
    </TextBlock>


4 commentaires

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 . La solution correcte est



16
votes

Essayez ceci. Il ne laissera pas de cadre vide. XXX


0 commentaires

1
votes

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.


2 commentaires

+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.



2
votes

Je me rends compte que cela a un an, mais vous pouvez y accomplir cela dans le code - derrière.

Visibility = "{Binding showControl}"


1 commentaires

C'est ce que ToolTipService.Seuville est pour ... juste lier cela. Pas besoin de code - derrière ou aucun de ces autres shenanigans.



5
votes

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
}


1 commentaires

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.



2
votes

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;
        }
    }


1 commentaires

La totalité de l'OP est une grille, pas une chaîne.



0
votes

Exemple: je veux stocker des informations sur la ligne et ajouter à ma toile xxx


1 commentaires

Cela ne répond pas à la question.



1
votes

Une solution beaucoup plus simple que les autres réponses: xxx

maketooltipisible est votre propriété.


0 commentaires