2011-04-19 66 views
2

當在SL4從代碼中設置CellStyle的DataGridTemplateColumn當我得到這個異常:例外設置CellStyle財產

MS.Internal.WrappedException:爲「缺少模板的類型初始值。無法初始化System.Windows.Controls.DataGridTemplateColumn。'拋出一個異常。

的代碼看起來是這樣的:

grdMain.IsReadOnly = true; 
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn(); templateColumn.HeaderStyle = (Style)this.Resources["ImageColumnHeaderStyle"]; 

templateColumn.CellStyle = (Style)this.Resources["CellStyle1"]; // This causes the exception 

//templateColumn.CellTemplate = (DataTemplate)this.Resources["DataTemplate1"]; // This works!  

grdMain.Columns.Add(templateColumn); 

標記是相當簡單:

<Control.Resources> 

    <Style x:Key="ImageColumnHeaderStyle" TargetType="sdk:DataGridColumnHeader"> 
    ... 
    </Style>   

    <DataTemplate x:Key="DataTemplate1"> 
     <TextBlock>abcde</TextBlock>  
    </DataTemplate>  

    <Style x:Key="CellStyle1" TargetType="sdk:DataGridCell"> 
    <Setter Property="Template" Value="{StaticResource DataTemplate1}">     
</Setter> 

    </Style> 
</Control.Resources> 

    <Grid x:Name="LayoutRoot"> 
     <sdk:DataGrid AutoGenerateColumns="False" Height="413" Name="grdMain" Width="335" /> 
    <Grid> 

因爲風格不只是模板設置爲DataTemplate1,我真的很困惑!

爲什麼它在我通過CellStyle屬性設置CellTemplate而不是代碼時工作?

感謝

//彼得

+0

歡迎的話,請花幾分鐘閱讀FAQ和降價文件(一個有用的synposis其在右可用編輯問題時手邊距)。 – AnthonyWJones 2011-04-19 19:24:23

+0

它必須是在CellStyle1聲明中的一些東西,因爲我試過了你的代碼,它的工作 – 2011-04-19 19:26:05

回答

1

任何控制的Template屬性有一個不DataTemplate爲您的代碼出現ControlTemplate進行嘗試。 此: -

<Setter Property="Template" Value="{StaticResource DataTemplate1}" /> 

應該是這樣的: -

<Setter Property="ContentTemplate" Value="{StaticResource DataTemplate1}" /> 
+0

幾乎在那裏,它是ContentTemplate(在DataGridCell上),而不是CellTemplate(它在DataGridColumn上)。 – CodeNaked 2011-04-21 03:24:46

+0

@CodeNaked:很好的發現。 – AnthonyWJones 2011-04-21 08:23:13