工具提示文化是错误的。

6

我在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) 控制面板/区域和语言/格式 并将格式设置为 English (United States)
  • 进入其他设置/数字并将小数符号.更改为,
  • 创建新的wpf应用程序,复制xaml,添加语言覆盖,添加转换器并设置:

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

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
    }
}
1个回答

4
我也遇到了同样的问题。您可以通过在ToolTip内部添加TextBlock,并将相同的Text="{local:Bind Test}"绑定到此ToolTip的TextBlock上来解决此问题。
<TextBlock>
    <TextBlock.ToolTip>
        <TextBlock Text="{local:Bind Test}"/>
    </TextBlock.ToolTip>
</TextBlock>

同样的结果。我没有改变 CurrentCultureCurrentUICulture(两者都使用 , 作为数字小数点)。问题是为什么 ToolTip 没有使用它。我可以将其更改为具有某些 奇特 分隔符,例如 CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("ru-Ru") { NumberFormat = new NumberFormatInfo() { NumberDecimalSeparator = "+" } };(在覆盖语言之前),这对于 Text 没有问题,但被 ToolTip 忽略。 - Sinatr
@Sinatr 是的,我也遇到了同样的问题。因此,您可以通过在工具提示中添加 TextBlock 并将相同的 Text="{local:Bind Test}" 绑定到此 ToolTip 的 TextBlock 来解决此问题。<TextBlock> <TextBlock.ToolTip>
<TextBlock Text="{local:Bind Test}"/> </TextBlock.ToolTip> </TextBlock>
- Smirti
好主意(将“TextBlock”放入“TextBlock.ToolTip”中),将其添加到答案中,我会接受它。 - Sinatr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接