如何使用样式/模板格式化 wpf 中的小数位数?

2023-12-12

我正在编写一个 WPF 程序,并且试图找到一种通过样式或模板等可重复方法来格式化 TextBox 中的数据的方法。我有很多文本框(确切地说是 95 个),每个文本框都绑定到自己的数字数据,每个数据都可以定义自己的分辨率。例如,如果数据为 99.123,分辨率为 2,则应显示 99.12。同样,数据值 99 和分辨率 3 应显示为 99.000(而不是 99)。有没有办法做到这一点?

Edit:我应该澄清一下,我正在处理的当前屏幕上有 95 个文本框,但我希望程序中各个屏幕上的每个文本框都显示正确的小数位数。现在我想了一下,其中一些是文本框(就像我现在正在处理的屏幕),一些是数据网格或列表视图,但如果我能弄清楚如何让它为文本框工作,我相信我能弄清楚也适用于其他控件。

在这种情况下,没有太多代码可以分享,但我会尝试使其更清楚:

我有一个视图模型,其中包含以下属性(vb.net):

    Public ReadOnly Property Resolution As Integer
        Get
            Return _signal.DisplayResolution
        End Get
    End Property

    Public ReadOnly Property Value As Single
        Get
            Return Math.Round(_signal.DisplayValue, Resolution)
        End Get
    End Property

在 XAML 中我有:

<UserControl.Resources>
    <vm:SignalViewModel x:Key="Signal" SignalPath="SomeSignal"/>
</UserControl.Resources>
<TextBox Grid.Column="3" IsEnabled="False" Text="{Binding Path=Value, Source={StaticResource Signal}, Mode=OneWay}" />

编辑2(我的解决方案):事实证明,离开电脑一段时间后,我回来发现一个简单的答案就在我面前。在视图模型中格式化数据!

    Public ReadOnly Property Value As String
        Get
            Return (Strings.FormatNumber(Math.Round(_signal.DisplayValue, _signal.DisplayResolution), _signal.DisplayResolution))
        End Get
    End Property

您应该使用StringFormat on the Binding。您可以使用标准字符串格式, or 自定义字符串格式:

<TextBox Text="{Binding Value, StringFormat=N2}" />
<TextBox Text="{Binding Value, StringFormat={}{0:#,#.00}}" />

请注意,StringFormat仅当目标属性为字符串类型时才有效。如果你想设置类似Content财产 (typeof(object)),您将需要使用自定义StringFormatConverter (像这儿),并将格式字符串作为ConverterParameter.

编辑更新的问题

所以,如果你的ViewModel定义精度,我建议这样做MultiBinding,并创建您自己的IMultiValueConverter。这在实践中非常烦人,从一个简单的绑定变成一个需要扩展到一个MultiBinding,但是如果在编译时不知道精度,这几乎就是您所能做的。你的IMultiValueConverter需要获取值和精度,并输出格式化的字符串。你可以使用以下方法来做到这一点String.Format.

然而,对于像这样的事情ContentControl,您可以更轻松地使用Style:

<Style TargetType="{x:Type ContentControl}">
    <Setter Property="ContentStringFormat" 
            Value="{Binding Resolution, StringFormat=N{0}}" />
</Style>

任何公开的控件ContentStringFormat可以这样使用。很遗憾,TextBox没有那样的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用样式/模板格式化 wpf 中的小数位数? 的相关文章

  • 为什么在 WinForms 中可以跨线程添加控件,而在 WPF 中却不能?

    在虚拟 WinForms 应用程序中 我可以在设计时创建 ListBox 在运行时创建后台线程 然后从后台线程将控件添加到 ListBox 但如果我在 WPF 中执行相同的操作 则会出现错误 为什么我可以在 WinForms 中执行此操作
  • 根据值更改 DataGrid 单元格颜色

    我有一个 WPF 数据网格 我想要根据值使用不同的单元格颜色 我的 xaml 上有以下代码 Style TargetType DataGridCell 但不是只选择一个单元格而是选择所有行 我缺少什么 如果您尝试设置DataGrid Cel
  • OpenGL:顶点越多,性能越慢

    我正在开发一个程序的一部分 其中给定 xyz 坐标集合 制作 3D 模型 我已经完成了这张图片所需的所有功能 即平移 旋转 缩放 但是给出的 xyz 坐标越多 程序运行速度就越慢 我的程序在处理 29 000 个坐标时运行得非常流畅 但当我
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • WPF 简单绑定到对象属性

    我在 wpf xaml 中绑定时遇到一些问题 有这个简单的文件
  • 当 DataTable 为空时,DataGrid 显示空行

    我有一个DataGrid dg1 绑定到DataTable 数据集 表 代码运行良好并且DataGrid正在显示数据DataTable正确 但是 如果我Clear the DataTable the DataGrid也很清楚 但留下一个空行
  • UWP/XAML:如何使用BaseOn继承默认样式?

    微软官方article https msdn microsoft com en us windows uwp controls and patterns styling controls states 修改系统默认样式 您应该尽可能使用来自
  • 菜单项内的 Windows 10 UWP 应用菜单弹出菜单

    是否可以在菜单弹出项目内添加菜单弹出项目
  • WPF DataGrid 排序后滚动到顶部

    我有一个使用数据网格的 Net 4 0 WPF 应用程序 目前 按列排序后 网格的滚动位置保持在排序前的位置 对于此应用程序 我需要在任何排序后滚动到网格顶部 我尝试过像这样处理排序事件 Private Sub myDataGrid Sor
  • 在c# wpf中从Memorystream获取Imagesource

    我怎样才能得到ImageSource from MemoryStream在 WPF 中使用 C 或转换MemoryStream to ImageSource将其显示为 wpf 中的图像 using MemoryStream memorySt
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 数据绑定到代码隐藏中的目标 CLR 属性

    在代码隐藏中绑定到依赖属性很容易 你只需创建一个新的System Windows Data Binding对象 然后调用目标依赖对象的SetBinding method 但是 当我们绑定的属性是 CLR 属性并且您无法提供Dependenc
  • 从字节数组创建 BitmapImage

    我正在创建一个包含任意值的字节数组 并希望将其转换为 BitmapImage bi new BitmapImage using MemoryStream stream new MemoryStream data try bi BeginIn
  • 在 ViewModel 中使用 CollectionViewSource 的正确方法

    我使用拖放将数据源对象 数据库模型 绑定到DataGrid 基本上遵循这个例子实体框架与 WPF 的数据绑定 http msdn microsoft com en us data jj574514 通过这个实现 一切都运行良好 XAML
  • GridSplitter 从右侧调整大小 - 奇怪的行为

    使用 Kaxaml 从左侧调整大小可以按预期工作
  • Brush 属性的 WPF ColorAnimation

    我想知道是否有人可以帮助我 我有一个标签 当在后面的代码中调用方法时 我需要能够在任意两种颜色之间交叉淡入淡出 迄今为止我最好的尝试 Private OldColor as Color Colors White Sub SetPulseCo
  • 内容更新时自动调整列表视图列的大小

    我试图让列表视图中的 gridviewcolumns 在更新绑定源 视图模型上的可观察集合 时自动调整内容大小 列表视图填充正常 但当我刷新 更新集合时不起作用 这是我到目前为止正在尝试的解决方案 XAML
  • 将列表数组中的值绑定到列表框

    任何机构都可以给出一个简短的示例 用于将列表数组中的值绑定到 c net 中的列表框 这取决于您的列表数组的情况 让我们从一个简单的示例开始 List
  • WPF 缩放变换和 ScrollViewer - 缩放时无法滚动超出原始大小

    我在 ScrollViewer 中有一个 StackPanel 我有一个滑块 可以在堆栈面板上进行缩放变换 以允许放大和缩小功能 问题是 当我放大时 滚动查看器不会将内容视为 更大 因此 如果我滚动一点并尽可能向右滚动 它会在我到达内容末尾
  • jQuery 模板插件:如何创建双向绑定?

    我开始使用 jQuery 模板插件 微软创建的 但现在我面临这个问题 模板用于绑定到对象数组的一堆表单 当我更改其中一个表单上的某些内容时 我希望更新绑定的对象 但我不知道如何自动执行该操作 这是一个简单的例子 现实生活中的模板和对象要复杂

随机推荐