XAML 使用当前操作系统十进制分隔符在TextBlock中显示静态数字

aydmsdu9  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(136)

我认为这是一个超级基本的问题,但我不能让它运行。我想显示一个固定的数字在我的WPF视图没有绑定。这个数字是0.001或在德国0,001。看到分隔符。现在,如果我切换用户界面的语言,数字分隔符应该更新为正确的语言之一。

<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>
nszi6y05

nszi6y051#

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

声明。

q3qa4bjr

q3qa4bjr2#

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

  • 属性保存当前货币符号。
  • CurrencyConverter是一个将双精度浮点数格式化为“$0.00”的转换器。
  • ZERO是我的常数值。

编码:

<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”来稍微改进可接受的答案,因为它是一个静态数字。

相关问题