2011-06-14 34 views
4

我有一個listview,我在運行時構造,即列在編譯時不知道。GridViewColumn CellTemplate代碼隱藏

我想將DataTemplate應用於單元格,使TextAlignment屬性爲TextAlignment.Right。創建列時:

foreach (var col in dataMatrix.Columns) 
{ 
    gridView.Columns.Add(
     new GridViewColumn 
     { 
      Header = col.Name, 
      DisplayMemberBinding = new Binding(string.Format("[{0}]", count)), 
      CellTemplate = getDataTemplate(count), 
     }); 
    count++; 
} 

private static DataTemplate getDataTemplate(int count) 
{ 
    DataTemplate template = new DataTemplate(); 
    FrameworkElementFactory factory = new FrameworkElementFactory(typeof(TextBlock)); 
    factory.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Right); 
    template.VisualTree = factory; 

    return template; 
} 

上面的示例代碼無法正常工作,因爲單元格內容仍然對齊到左側。

回答

2

由於您不使用DataTemplate中的count屬性,只需在xaml中創建DataTemplate,那麼您知道在TextBox上設置的任何屬性都將應用。我個人會使用Datagrid並將其設置爲只讀。它爲您創建特定類型的動態列提供了更大的靈活性。

13

如果使用DisplayMemberBinding,則不會使用CellTemplate。

您必須將其清除DisplayMemberBinding並添加綁定的數據模板的一部分:

private static DataTemplate getDataTemplate(int count) 
{ 
    DataTemplate template = new DataTemplate(); 
    FrameworkElementFactory factory = new FrameworkElementFactory(typeof(TextBlock)); 
    factory.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Right); 
    factory.SetBinding(TextBlock.TextProperty, new Binding(string.Format("[{0}]", count))); 
    template.VisualTree = factory; 

    return template; 
}