繁体   English   中英

使用当前 OS 小数分隔符在 TextBlock 中显示静态数字

[英]Display a static number in a TextBlock using the current OS decimal separator

我认为这是一个超级基本的问题,但我无法让它运行。 我想在没有绑定的情况下在我的 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>

如果您希望 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"

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

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

并添加

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

宣言。

我有一个真实的例子,它输出“XXXXX from $0.00 to YYYY”作为工具提示。 这有点复杂,因为它显示了前导和尾随文本以及使用带有静态/常量数字的转换器。

背景:

  • 属性保存当前货币符号。
  • CurrencyConverter 是一个转换双精度格式的转换器,它看起来像“$0.00”。
  • 零是我的常数值。

代码:

<TextBlock>
  <TextBlock.Resources>
     <system:Double x:Key="ZERO">0.00</system:Double>
  </TextBlock.Resources>
  XXXXX from 
  <Run>                                                    
    <Run.Text>
      <MultiBinding Converter="{StaticResource CurrencyConverter}">
        <Binding Source="{StaticResource ZERO}" Mode="OneWay"/>
        <Binding Source="{x:Static properties:Settings.Default}" Path="CurrencySymbols" Mode="OneWay" />
      </MultiBinding>
    </Run.Text>
  </Run>
  to YYYY 
</TextBlock>

总的来说,我建议通过在绑定中添加额外的 Mode="OneWay" 可以稍微改进接受的答案,因为它是一个静态数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM