2016-05-12 75 views
5

我在XAML:工具提示的文化是错误

<TextBlock Text="{local:Bind Test}" ToolTip="{local:Bind Test}" /> 

,这里是截图(用放大镜):

我的问题是什么是怎么回事?为什么工具提示显示不同的值(小数点是.,而预期的是,)?


更长的故事:

我试图在用户的Windows数字格式的喜好来显示相同​​数字的格式。

为此,我已经覆盖显示窗口(覆盖App.OnStartup)之前的语言:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), 
    new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 

而且使用下面的自定义绑定(设置默认转换器文化)

public class Bind : Binding 
{ 
    public Bind(string path) : base(path) 
    { 
     ConverterCulture = CultureInfo.CurrentCulture; 
    } 
} 

它适用于TextBoxText财产,但它不适用于ToolTip

要真正明白我的显示在屏幕截图:

  • 去(Windows 7)中Control Panel/Region and Language/Formats,并设置FormatEnglish (United States)
  • Additional settings/Numbers.改变Decimal symbol,
  • 创建新的WPF应用程序,复制xaml,添加语言覆盖,添加转换器并设置:

public partial class MainWindow : Window 
{ 
    public double Test { get; set; } = 1.234567; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 
} 

回答

4

我也面临同样的问题。因此,您可以通过在ToolTip内部添加TextBlock来解决此问题,并为此ToolTip的TextBlock绑定相同的Text="{local:Bind Test}"

<TextBlock> 
    <TextBlock.ToolTip> 
     <TextBlock Text="{local:Bind Test}"/> 
    </TextBlock.ToolTip> 
</TextBlock> 
+0

同样的结果。我不会更改CurrentCulture或CurrentUICulture(都有','作为数字小数点)。关键是为什么'ToolTip'不使用它。我可以改变它有一些* exotic *分隔符,比如'CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(“ru-Ru”){NumberFormat = new NumberFormatInfo(){NumberDecimalSeparator =“+”}};''(先前的重写语言),适用于没有问题的“文本”,但被“工具提示”忽略。 – Sinatr

+0

@Sinatr是的,我也面临同样的问题。因此您可以通过在工具提示中添加TextBlock来解决此问题,并为此ToolTip的TextBlock绑定相同的Text =“{local:Bind Test}”。 Smirti

+0

好主意(把内部''TextBlock.ToolTip' TextBlock' ),将此添加到答案中,我会接受它。 – Sinatr

相关问题