La liaison WPF avec SsortingngFormat ne fonctionne pas sur les info-bulles

Le code suivant a une liaison simple qui lie le Text of the TextBlock nommé MyTextBlock à la propriété Text et ToolTip TextBox en utilisant exactement la même notation de liaison:

 Foo Bar   

La liaison utilise également la propriété SsortingngFormat introduite avec .NET 3.5 SP1, qui fonctionne correctement pour la propriété Text ci-dessus, mais semble être cassée pour l’info-bulle. Le résultat attendu est “C’est: Foo Bar” mais lorsque vous survolez la zone de texte, l’info-bulle affiche uniquement la valeur de liaison, pas la valeur formatée de la chaîne. Des idées?

Les info-bulles dans WPF peuvent contenir n’importe quoi, pas seulement du texte, elles fournissent donc une propriété ContentSsortingngFormat pour les temps que vous voulez juste du texte. Vous devez utiliser la syntaxe étendue pour autant que je sache:

      

Je ne suis pas sûr à 100% de la validité de la liaison en utilisant la syntaxe ElementName d’une propriété nestede comme celle-ci, mais la propriété ContentSsortingngFormat est ce que vous recherchez.

Ce pourrait être un bug. Lorsque vous utilisez une syntaxe courte pour une info-bulle:

  

SsortingngFormat est ignoré mais lorsque vous utilisez une syntaxe étendue:

      

Cela fonctionne comme prévu.

Comme Matt a dit que l’info-bulle peut contenir n’importe quoi à l’intérieur, vous pouvez lier un TextBox.Text dans votre ToolTip.

  Foo Bar           

Même vous pouvez emstackr une grid à l’intérieur de l’info-bulle et mettre en page votre texte si vous le souhaitez.

Votre code peut être aussi court que celui-ci:

  

Nous utiliserons le fait que les convertisseurs ne sont jamais ignorés, contrairement à SsortingngFormat.

Mettez ceci dans SsortingngFormatConverter.cs :

 using System; using System.Globalization; using System.Windows; using System.Windows.Data; namespace TLKiaWOL { [ValueConversion (typeof(object), typeof(ssortingng))] public class SsortingngFormatConverter : IValueConverter { public object Convert (object value, Type targetType, object parameter, CultureInfo culture) { if (ReferenceEquals(value, DependencyProperty.UnsetValue)) return DependencyProperty.UnsetValue; return ssortingng.Format(culture, (ssortingng)parameter, value); } public object ConvertBack (object value, Type targetType, object parameter, CultureInfo culture) { throw new NotSupportedException(); } } } 

Mettez ceci dans votre ResourceDictionary.xaml :

  

Dans cette situation, vous pouvez utiliser une liaison relative:

  Foo Bar   

Ce qui suit est une solution verbeuse mais ça marche.

    42       

Je préférerais une syntaxe beaucoup plus simple, quelque chose comme celui de ma question initiale.