2010-09-07 56 views
1

我有一個WPF DataGrid,並希望將貨幣格式應用於多個列。我可以使用Binding={Binding FieldName, StringFormat={}{0:C}以列爲單位進行此操作,但我更願意定義一次貨幣格式 - 大概在<Style>資源中 - 並將該資源應用於需要格式化的每列。可以使用WPF樣式將貨幣格式應用於DataGrid單元格嗎?

問題是,我不知道如何從樣式中設置Binding的StringFormat屬性。是否有可能在<Style>中設置這個或類似的屬性,還是我用這種方法吠叫錯誤的樹?

更新:我已經成功地應用了樣式的細胞中我DataGridTextColumn,並設置電池的ContentStringFormat財產好像它會是要走的路......但無論價值我擺在那裏似乎被忽略。

+1

如果你將要應用的風格在每列的基礎,什麼是錯的應用的StringFormat呢?我認爲如果在綁定中而不是在樣式中完成,則會更容易閱讀。 – Rachel 2010-09-07 17:00:35

+0

可能更具可讀性,是的。但是我在擴展方面想:假設將來我希望所有貨幣列的格式設置爲使其文本顏色在包含負值時變爲紅色(如財務預印本中常見的那樣)。這就是我想要封裝在風格中的那種常見行爲;我討厭在不同的地方使用顏色格式和貨幣格式...... – 2010-09-07 17:22:55

+0

在參考負值時,我會將單元格的ForeColor綁定到該值並使用Converter,並將Red返回爲負值。 – benPearce 2010-09-07 22:44:31

回答

1

您可以爲DataGrid單元格創建模板,並使用{TemplateBinding ContentPresenter.Content}值作爲轉換器參數。

我沒有測試此代碼,但這樣的:

<ControlTemplate TargetType="{x:Type DataGridCell}" x:Key="CurrencyFormatCell"> 
    <TextBlock 
     Text="{TemplateBinding ContentPresenter.Content, Converter={StaticResource FormatCurrencyConverter}}" 
     ForeGround="{TemplateBinding ContentPresenter.Content, Converter={StaticResource CurrencyTextColorConverter}}" 
     /> 
</ControlTemplate> 
+0

對不起,這花了很長時間才接受 - 我花了一段時間纔回來。爲了封裝所提到的所有內容,我可能會最終將使用單元格模板而不是樣式。謝謝! – 2010-09-28 19:29:50