在SL4中,当从代码中为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之外什么也没做,我真的很困惑!
为什么我从代码设置CellTemplate时却没有,但是当我通过CellStyle属性设置它时呢?
谢谢
//彼得
答案 0 :(得分:1)
任何控件的Template
属性都需要ControlTemplate
而不是DataTemplate
,因为您的代码似乎正在尝试。
此: -
<Setter Property="Template" Value="{StaticResource DataTemplate1}" />
应该是这样的: -
<Setter Property="ContentTemplate" Value="{StaticResource DataTemplate1}" />