2013-12-12 78 views
0

我已經嘗試了很多選項,但沒有一個對我來說似乎沒有問題。這裏是問題:顯示網格與動態列和單元格背景

動態列。我收到了一個字典列表。所有字典可能有不同的鍵。 例如

[ [key1: 111], [key2: 222] ] 
[ [key1: 333], [key4: 444] ] 
[ [key5: 777] ] 

我需要所有按鍵爲列像這樣顯示網格:

[key1] [key2] [key4] [key5] 
    111 222 
    333   444 
         777 

這是很容易的,我剛剛生成的代碼列無論是GridView控件或DataGrid中。

但有一個第二個要求:

我需要取決於他們的價值色彩的特定細胞。 例如對於111 bg顏色應該是綠色的,對於333它應該是紅色等等。

目前我只能使一部分工作。我可以動態創建列,但是我無法爲它們着色。或者我可以創建靜態列並創建具有bg顏色綁定的自定義單元格模板。但是,那麼在每個模板中我都必須指定綁定。所以模板的數量會很大。 有沒有一種方法來實現我所需要的,而不需要爲每列生成模板?

我個人想避免在代碼中生成模板。

回答

0

不知道我完全理解你的問題,但它應該很簡單。 DataGrid非常靈活。據我所知,你幾乎已經擁有了它。現在你想要一個全局的CellTemplate,它可以從XAML資源中獲得(所以你不需要將它硬編碼到代碼中)。

CellTemplate可以根據觸發器更改顏色。您可以將其硬編碼到XAML中,也可以提供可以從「VALUE」映射到「COLOR」的字典,並將CellTemplate的背景綁定到該字典。

當您動態生成列時,您將DataGridTextColumn.CellTemplate設置爲LoadDynamicallyXaml(「yourresource」)。當你生成列時,你可以訪問你的DataGrid資源,並且你也可以從那裏獲取CellTemplate,這是更簡潔的方式。

Loading XAML at runtime?

0

您可以定義一個Style爲包含TextBlockDataTriggers,然後只是應用該Style在你的動態創建列的TextBlock ...這種方法應該是不錯達約8個不同的值/顏色對代碼變得很長之前:

<Style TargetType="{x:Type TextBlock}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding}" Value="111"> 
      <Setter Property="TextElement.Foreground" Value="LightGreen" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding}" Value="222"> 
      <Setter Property="TextElement.Foreground" Value="LightBlue" /> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding}" Value="333"> 
      <Setter Property="TextElement.Foreground" Value="LightPink" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

,您可以使用另一種方法是使用一個Converter類與Binding。你可以找到很多網上的帖子這樣做的詳細的例子......這裏有幾個:

How to set Foreground of DataGrid Column with ValueConverter
Datagrid AutoGenerateColumns="True" forecolor IValueConverter

+0

是的,我試圖告訴你什麼。但不幸的是,TextBlock的DataContext是整個字典。所以我沒有獲得實際價值。並且轉換爲字符串的值(來自文本綁定)不適合。 –