Est-il possible de désactiver les toooltips pour tous les contrôles (toujours ou en fonction d'une règle) sans définir TooltipService.IsEnabled sur chaque contrôle ? Passer par tous les éléments logiques prend trop de temps.
Réponse
Trop de publicités?Je n'ai pas de réponse pour gérer l'ensemble de l'application en une seule déclaration, mais j'ai pu centraliser un certain nombre de paramètres spécifiques à l'interface utilisateur dans une classe de base générale, puis créer des applications qui sont dérivées de cette classe de base et héritent des paramètres centralisés. Je dois mentionner qu'il y a quelques plomberie que vous devez ajouter à la classe de base pour supporter MVVM comme dans le cas suivant :
public class MyMainWindowBaseClass : Window, INotifyPropertyChanged
{
...whatever unrelated stuff you need in your class here...
private int m_toolTipDuration = 3000; // Default to 3 seconds
public int MyToolTipDuration
{
get { return m_toolTipDuration; }
set
{
if (m_toolTipDuration != value)
{
bool transition = (value == 0 || m_toolTipDuration == 0);
m_toolTipDuration = value;
NotifyPropertyChanged("MyToolTipDuration");
if (transition)
{
NotifyPropertyChanged("MyToolTipEnabled");
}
}
}
}
public bool MyToolTipEnabled
{
get { return (m_toolTipDuration > 0); }
}
public event PropertyChangedEventHandler PropertyChanged;
... whatever variables, properties, methods, etc., you need here...
///-----------------------------------------------------------------------------
/// <summary>
/// Fires property-changed event notification
/// </summary>
/// <param name="propertyName">The name of the property that changed</param>
///-----------------------------------------------------------------------------
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Le code XAML ressemble à ceci :
<Button Command="{Binding StartCommand}"
Content="Start"
FontWeight="Bold"
Height="Auto"
HorizontalAlignment="Left"
Margin="20,40,0,0"
Name="ui_StartButton"
ToolTip="Click this button to begin processing."
ToolTipService.IsEnabled="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=MyToolTipEnabled}"
ToolTipService.ShowDuration="{Binding RelativeSource={RelativeSource AncestorType=Window},Path=MyToolTipDuration}"
VerticalAlignment="Top"
Width="90"/>
Les liaisons importantes étant celles liées à ToolTipService.IsEnabled y ToolTipService.ShowDuration .
Vous pouvez voir que si MyToolTipDuration est mis à zéro, MyToolTipEnabled renvoie false, ce qui désactive l'infobulle. Dans ma première tentative, j'ai simplement essayé de définir MyToolTipDuration à zéro sans utiliser l'option ToolTipService.IsEnabled= (en anglais) en collaboration avec le MyToolTipEnabled mais tout ce que cela a donné, ce sont des infobulles clignotantes, à peine lisibles, qui apparaissent et disparaissent.
Dans l'ensemble, cela a plutôt bien fonctionné pour moi (ymmv), mais pas aussi bien qu'un paramètre unique ou un appel unique qui aurait géré l'ensemble de l'application et contourné la nécessité de distribuer ces liens dans chaque élément avec une info-bulle que je voulais pouvoir désactiver. Oh bien, quand on est à Rome....
Dans tous les cas, j'espère que quelqu'un trouvera cela utile.
- Réponses précédentes
- Plus de réponses