2

我正在使用扩展 WPF 工具包中的 PropertyGird。我几乎可以做任何我需要的事情,但我无法格式化数字。

我有一个double属性,我希望它只显示两个十进制数字(其字符串格式应该是"F2")。我已经尝试通过放置[DisplayFormat(DataFormatString = "{F2}")]属性,但它似乎没有任何效果(我仍然有我的 10 位数字)。

难道我做错了什么?我真的需要为该double类型创建一个 CustomEditor ,它将像这样格式化我的所有double属性吗?

任何帮助表示赞赏!

编辑:使用网格的 AutoGenerateProperties 选项自动绑定该属性。我没有明确的绑定。如果可能的话,我想保持这种方式,但这不是强制性的。

4

2 回答 2

1

我终于在 PropertyGrid.EditorDefinitions 中找到了使用 DataTemplate 的方法。在下面的示例中,每个 Double 类型的属性都有一个格式为“F2”的“DoubleUpDown”编辑器。

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>
于 2017-07-17T07:08:50.083 回答
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);
    }
}
于 2012-11-15T16:09:33.187 回答