【问题标题】:Display a static number in a TextBlock using the current OS decimal separator使用当前 OS 小数分隔符在 TextBlock 中显示静态数字
【发布时间】:2020-05-21 02:35:53
【问题描述】:

我认为这是一个超级基本的问题,但我无法让它运行。我想在没有绑定的情况下在我的 WPF 视图中显示一个固定数字。这个数字是 0.001 或德语 0,001。请参阅分隔符。 现在如果我切换 UI 语言,数字分隔符应该更新为正确的语言之一。

<TextBlock>
    <Run Text="0.001" />
    <Run Text=" " />
    ...
</TextBlock>

这应该是非常微不足道的,我认为 StringFormat 应该满足需求,但正如我所说,我无法让它工作。感谢您的帮助

解决方案:感谢@Corentin Pane 为我指出解决方案。 正如他所说,我需要声明价值

<TextBlock>
    <TextBlock.Resources>
        <system:Double x:Key="MinValue">0.001</system:Double>
    </TextBlock.Resources>

    <Run Text="{Binding Source={StaticResource MinValue}, Mode=OneTime, StringFormat='N3', ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}" />
    <Run Text=" " />
    ...
</TextBlock>

【问题讨论】:

  • 第一个细节,"0.001" 是字符串,不是数字;默认情况下,WPF 不知道您要在此处显示数字。有关潜在的解决方案,请参阅this thread
  • 没错。但这不需要是一个数字,我也可以制作多个 一个只包含“。”要么 ”,”。但是我需要得到正确的数字分隔符

标签: c# wpf xaml localization


【解决方案1】:

如果您希望 WPF 适当地格式化您的数字,它应该从一开始就是一个数字(如 double),而不是像 "0.001" 这样的硬编码字符串。您可以使用绑定到静态资源:

<TextBlock>
    <TextBlock.Resources>
        <system:Double x:Key="myFixedValue">0.001</system:Double>
    </TextBlock.Resources>
    <TextBlock.Text>
        <Binding Source="{StaticResource myFixedValue}"/>
    </TextBlock.Text>
</TextBlock>

具有以下命名空间:

xmlns:system="clr-namespace:System;assembly=mscorlib"

现在您可以担心格式了,正如评论中所述,this thread 提供了一些提示。例如,您可以将 Binding 更改为:

<Binding Source="{StaticResource myFixedValue}"
         StringFormat="f"
         ConverterCulture="{x:Static gl:CultureInfo.CurrentCulture}"/>

并添加

xmlns:gl="clr-namespace:System.Globalization;assembly=mscorlib"

声明。

【讨论】:

    猜你喜欢
    • 2021-12-09
    • 2023-04-05
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多