2010-03-31 70 views
2

我創建這個模板,它使用適用於ContentPresenter,這樣我可以將數據對象的Column屬性綁定到Grid.Column一種風格,讓項目自己確定他們進入該Grid列:爲什麼在ContentPresenter上使用樣式時會出現NullReferenceException?

<DataTemplate DataType="{x:Type local:MyObject}"> 
    <ItemsControl ItemsSource="{Binding Items}"> 
    <ItemsControl.Resources> 
     <Style TargetType="{x:Type ContentPresenter}"> 
     <Setter Property="Grid.Column" 
       Value="{Binding Column}" /> 
     </Style> 
    </ItemsControl.Resources> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
     </Grid> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</DataTemplate> 

當我運行該程序時,我得到一個NullReferenceException。熱鬧的長堆跡的開始:

at System.Windows.StyleHelper.ApplyAutoAliasRules(OptimizedTemplateContent optimizedTemplateContent, HybridDictionary childIndexFromChildID, FrameworkTemplate frameworkTemplate, FrugalStructList`1& childRecordFromChildIndex, FrugalStructList`1& triggerSourceRecordFromChildIndex, FrugalStructList`1& resourceDependents, HybridDictionary& dataTriggerRecordFromBinding, Boolean& hasInstanceValues) 
at System.Windows.StyleHelper.ProcessTemplateContent(FrameworkTemplate frameworkTemplate, FrugalStructList`1& childRecordFromChildIndex, FrugalStructList`1& triggerSourceRecordFromChildIndex, FrugalStructList`1& resourceDependents, ItemStructList`1& eventDependents, HybridDictionary& dataTriggerRecordFromBinding, HybridDictionary childIndexFromChildID, Boolean& hasInstanceValues) 
at System.Windows.StyleHelper.SealTemplate(FrameworkTemplate frameworkTemplate, Boolean& isSealed, FrameworkElementFactory templateRoot, TriggerCollection triggers, ResourceDictionary resources, HybridDictionary childIndexFromChildID, FrugalStructList`1& childRecordFromChildIndex, FrugalStructList`1& triggerSourceRecordFromChildIndex, FrugalStructList`1& containerDependents, FrugalStructList`1& resourceDependents, ItemStructList`1& eventDependents, HybridDictionary& triggerActions, HybridDictionary& dataTriggerRecordFromBinding, Boolean& hasInstanceValues, EventHandlersStore& eventHandlersStore) 
at System.Windows.FrameworkTemplate.Seal() 
at System.Windows.StyleHelper.UpdateTemplateCache(FrameworkElement fe, FrameworkTemplate oldTemplate, FrameworkTemplate newTemplate, DependencyProperty templateProperty) 
at System.Windows.Controls.ContentPresenter.OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) 

...等等。

這不是綁定。比如,如果我明確地將樣式的setter中的值設置爲0,我仍然會得到錯誤。如果我刪除了樣式,則錯誤消失,儘管如此,所有項目都會列在第0列中。

這是怎麼回事?我該如何調試這樣的問題?

回答

3

解決問題很簡單:將樣式從ItemsControl的資源字典移至DataTemplate's。

但我仍然不知道爲什麼我得到一個空引用異常。

+0

謝謝..這節省了我大概幾小時的浪費時間! – danjarvis 2011-07-19 17:36:07

+0

獲得相同的問題,但在RD中定義樣式時 – Vitalij 2013-04-04 16:40:29

相關問題