如何在 XAML 中格式化此字符串?

Posted

技术标签:

【中文标题】如何在 XAML 中格式化此字符串?【英文标题】:How can I format this string in XAML? 【发布时间】:2021-05-11 15:43:21 【问题描述】:

我正在尝试将使用 Winforms 中的部件的程序转换为 WPF。我在这部分遇到了一些麻烦。程序这样做:

this.textBox.Properties.DisplayFormat.FormatString = "#,#;-#,#;-";

我不太确定这是做什么的,我正在努力将其转换为 WPF 的 XAML。我知道我必须在这里设置它:

Text="Binding x, Mode=OneWay, StringFormat=..."/>

但我不确定什么是等价的,因为#,#;-#,#;- 不起作用。谢谢你的帮助! :)

【问题讨论】:

Custom numeric format strings Text="Binding x, Mode=OneWay, StringFormat=0:#,#;-#,#;-"/> 应该可以正常工作。请修正您的帖子,使其包含minimal reproducible example 形式的实际 代码,以及该代码的作用、与您想要的有何不同以及 的精确解释特别是你遇到了麻烦。 【参考方案1】:

根据WinForms Format Specifiers,您的原始格式字符串是:

    您希望正十进制数看起来像整数 #,#(例如:1234.5 看起来像 1,234) 您希望负十进制数看起来像整数 -#,#(例如:-1234.5 看起来像 -1,234) 您希望零看起来像 -(示例:-)

对于 WPF,您可以使用相同的字符串格式说明符,但您需要在格式前添加 。这是必需的,否则 WPF 会与其他标记扩展混淆。

这是一个例子:

Main.xaml

<StackPanel>
    <TextBlock Text="Binding Value1, StringFormat=0:#,#;-#,#;-"/>
    <TextBlock Text="Binding Value2, StringFormat=0:#,#;-#,#;-"/>
    <TextBlock Text="Binding Value3, StringFormat=0:#,#;-#,#;-"/>
</StackPanel>

Main.xaml.cs

public double Value1  get; set; 
public double Value2  get; set; 
public double Value3  get; set; 
public MainWindow()

    InitializeComponent();
    Value1 = 1234567.890f;
    Value2 = -987654.321f;
    Value3 = 0;
    this.DataContext = this;

这是最终输出:

【讨论】:

以上是关于如何在 XAML 中格式化此字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在UWP [XAML]中隐藏列格式DataGridTextColumn?

WPF XAML日期时间字符串的格式化

带转换器的多重绑定中的 XAML 字符串格式

WPF中XAML中使用String.Format格式化字符串示例

如何按存储在字符串变量中的名称获取 XAML 元素?

DateTime 字符串格式 (dd.MM) 本地化 XAML