我正在使用Extended WPF Toolkit中的PropertyGird。我能够做几乎我需要的任何事情,但我无法格式化数字。
我有一个double
属性,我希望它只显示两位小数(字符串格式应为"F2"
)。我试过放[DisplayFormat(DataFormatString = "{F2}")]
属性,但它似乎没有任何影响(我仍然有我的10位数字)。
我做错了吗?我确实需要为double
类型创建一个CustomEditor,它会格式化所有我的double
属性吗?
感谢任何帮助!
编辑:使用网格的AutoGenerateProperties选项自动绑定属性。我没有明确的约束力。如果可能的话,我想保持这种方式,但这不是强制性的。
答案 0 :(得分:1)
我终于找到了一种在PropertyGrid.EditorDefinitions中使用DataTemplate的方法。在下面的示例中,Double类型的每个属性都会得到一个" DoubleUpDown"编辑器的格式为" F2"。
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
<xctk:PropertyGrid ...>
<xctk:PropertyGrid.EditorDefinitions>
<xctk:EditorTemplateDefinition>
<xctk:EditorTemplateDefinition.TargetProperties>
<xctk:TargetPropertyType Type="{x:Type System:Double}" />
</xctk:EditorTemplateDefinition.TargetProperties>
<xctk:EditorTemplateDefinition.EditingTemplate>
<DataTemplate>
<xctk:DoubleUpDown FormatString="F2"
Value="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</xctk:EditorTemplateDefinition.EditingTemplate>
</xctk:EditorTemplateDefinition>
</xctk:PropertyGrid.EditorDefinitions>
</xctk:PropertyGrid>
通过在EditorTemplateDefinition.TargetProperties中命名特定属性,以下只有这些属性会受到DataTemplate的影响。
<xctk:EditorTemplateDefinition.TargetProperties>
<System:String>Volume</System:String>
<System:String>Weight</System:String>
</xctk:EditorTemplateDefinition.TargetProperties>
答案 1 :(得分:0)
我只能找到一种方法(非常脏):
void PropertyGrid_SelectedObjectChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
foreach (var p in pg.Properties)
{
if (p.PropertyType == typeof(double)) // or filter by p.Name
p.Value = string.Format("{0:F2}", p.Value);
}
}