【问题标题】:Padding a numeric display in WPF在 WPF 中填充数字显示
【发布时间】:2011-01-04 22:48:55
【问题描述】:

我有一个非常简单的位置读数——它只是一个应用了 Style 的 TextBlock。在那个 Style 中,我只是这样设置(属性比这个还多,但为了简洁起见,我把它们取出来了):

    <Style x:Key="NumberStyle" TargetType="{x:Type TextBlock}">
        <Setter Property="TextAlignment" Value="Center" />
    </Style>

现在,我有一个使用这种样式的显示器,它将显示一个从 0.0 到 30000.0 的数字。问题是,由于我将文本居中,所以数字(如果变化很快)会到处乱跳,这有点令人不安。我想格式化我的字符串,这样它就不会这样做了。

我在 XAML 中尝试了这个 ConverterParameter:

ConverterParameter='\{0:00000.0\}'

虽然它正确地进行了填充,但我会得到像 00032.5 这样的数字。然后我用# 替换了0,但最终的行为就像{0:0.0}。我查看了MSDN docs 并没有看到任何其他有用的信息。

我唯一能想到的是,我必须编写一个新的 IValueConverter 来执行此操作。换句话说,在 Convert() 方法中,我必须将 parameter 解析为我自己的特殊字符。然后当我检测到这一点时,用空格替换缺失的数字。

但是,我真正想在这里学习的是,这可以通过在格式字符串中简单地使用我不知道的不同字符来完成吗?

【问题讨论】:

    标签: wpf string ivalueconverter formatter


    【解决方案1】:

    我认为您需要类似{0,7} 的东西(在七个位置显示参数,向左填充空格)。但是,即使在这种情况下,要使文本不跳转,您也需要使用等宽字体,或者至少使用空格字符宽度等于数字宽度的字体。

    【讨论】:

      【解决方案2】:

      尝试 {}{0,10:#,0} 输入 10 个字符的字段。

      但是请注意,如果字体不是固定宽度的,这会产生奇怪的结果。我在Kaxaml 中试了一下,效果不错,但是文字与比例字体不一致。

      【讨论】:

      • 不确定前面的 {} 是干什么用的?我认为这是一个错字,因为这会产生编译器错误...
      • 它转义了 WPF 绑定标记扩展中的格式参数,其中“{”字符开始一个新的标记扩展。我以为您在标记扩展中使用它;如果没有,请删除它们。
      猜你喜欢
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多