2010-07-11 37 views
0

我有一個要求,在WPF中生成一個「報表」,它只是一個網格。WPF動態設計單元格

然而,列和樣式規則(例如,「紅色如果低於零值」)爲該網格是在編譯時未知的。

有數百個這樣的問題,我必須看過超過半數的人,但我不能找到解決這個要求這將是微不足道的WinForms。

我設法通過設置ListView控件的ItemContainerStyle樣式整行,但我不能設法得到這種專注於單個細胞。

因此,我正在嘗試CellTemplate方法,但是這會引發錯誤({"Child with Name '{x:Type ListViewItem}' not found in VisualTree."}),當然當我使用DisplayMemberBinding時,CellTemplate根本就沒有被調用。

當它被傳遞的值越來越整個行,而不僅僅是單元格的值,所以,這可能是有用的信息,我的轉換器。

GridView viewLayout = new GridView(); 
for (int i=0; i<columns.Length; i++) 
{ 
    ColumnDisplaySettings col = columns[i]; 
    var g = new GridViewColumn() 
    { 
     Width = col.Width, 
     //DisplayMemberBinding = "[" + i + "]" /* Have to omit this for CellTemplate */ 
    }; 

    if (i == 0) 
    { 
     g.CellTemplate = new DataTemplate(); 
     var t = new DataTrigger(); 
     t.Binding = new Binding("[0]"); 
     t.Value = "0"; 
     var b = new Binding() { Converter = new MyBkColorConverter() }; 
     t.Setters.Add(new Setter(Control.BackgroundProperty, b, 
      "{x:Type ListViewItem}")); /* Error here */ 
     g.CellTemplate.Triggers.Add(t); 
    } 

    viewLayout.Columns.Add(g); 
} 
lv.View = viewLayout; 

我遇到DataTemplateSelectors在我的搜索,因此,如果使用這些沒有任何已知的XAML存在一個有用的參考,那麼我也能欣賞。

感謝您提供的任何幫助。

回答

0

這個錯誤是因爲發生了 「{X:類型的ListViewItem}」 是一個字符串。 {x:..}表示法是一種XAML標記擴展,但您不使用XAML。要在代碼中引用列表ListViewItem,請使用typeof(ListViewItem)

哦也,你試圖背景屬性設置爲一個類型,ListViewItem的,這沒有什麼意義..讓我重新讀取和更新這個答案..

更新:不需要Setter構造函數的第三個參數。

希望有幫助!

+0

在這種情況下,TargetType需要一個字符串,而不是一個Type。 – 2010-07-11 14:10:27

+0

'哦,你正在試圖設置背景屬性爲一個類型< - 好吧,非常感謝你得到我想要的東西,所以會喜歡澄清。 – 2010-07-11 14:12:39

+0

我可以在這裏看到:http://msdn.microsoft.com/en-us/library/ms587944.aspx第三個參數是「targetName」,而不是「targetType」。 Style有一個目標類型,setter正在尋找'setter的'子節點的名字'。將在10秒內更新答案.. – 2010-07-11 14:12:46

0

使用WPF工具包的數據網格是一種解決辦法。 (評論是否需要更多細節)。

相關問題