2012-11-15 64 views
2

我從擴展WPF工具包使用PropertyGird。我幾乎可以做任何我需要的東西,但我無法格式化數字。擴展的WPF工具包PropertyGrid數字格式

我有一個double屬性,我希望它顯示只有兩個十進制數字(字符串格式應該是"F2")。我試圖通過把[DisplayFormat(DataFormatString = "{F2}")]屬性,但它似乎沒有任何影響(我仍然有我的10位數字)。

我做錯了什麼?我真的需要創建一個CustomEditor爲double類型,這將格式所有我的double屬性那樣?

任何幫助表示讚賞!

編輯:使用網格的AutoGenerateProperties選項自動綁定屬性。我沒有明確的約束。如果可能的話我想這樣保留,但這不是強制性的。

+0

你能告訴你如何綁定屬性? – Joulukuusi

回答

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); 
    } 
} 
+0

你說得對,它很髒:D。無論如何,最後我們已經決定「所有雙打的兩位數字都沒有問題」,所以我只需要爲所有的「double」屬性設置一個自定義編輯器。我仍然很困惑,大多數屬性都在工作,但是'DisplayFormat'不是。不管怎麼說,還是要謝謝你! – Cynical

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> 
相關問題