補充我有被合併到我的主題下面的ResourceDictionary/Generic.xaml文件WPF ResourceDictionary的項目已經使用ComponentResourceKey
<DataTemplate DataType="{x:Type model:RequirementResourceRelation}" x:Key="{x:Static local:Resources.RequirementResourceRelationListTemplateKey}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock MinWidth="35" HorizontalAlignment="Left" Padding="3,0" Text="{Binding Resource.Name, TargetNullValue=Loading...}" />
<TextBlock Grid.Column="1" Text="-" />
<TextBlock Grid.Column="2" MinWidth="35" HorizontalAlignment="Left" Padding="3,0" Text="{Binding Path=RelationType, TargetNullValue=Loading...}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" />
</Grid>
</DataTemplate>
<DataTemplate DataType="{x:Type model:RequirementResourceRelation}" x:Key="{x:Static local:Resources.RequirementResourceRelationListTemplate2Key}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock MinWidth="35" HorizontalAlignment="Left" Padding="3,0" Text="{Binding Requirement.Name, TargetNullValue=Loading...}" />
<TextBlock Grid.Column="1" Text="-" />
<TextBlock Grid.Column="2" MinWidth="35" HorizontalAlignment="Left" Padding="3,0" Text="{Binding Path=RelationType, TargetNullValue=Loading...}" TextWrapping="NoWrap" TextTrimming="CharacterEllipsis" />
</Grid>
</DataTemplate>
我試圖爲相同的數據類型與創建兩個不同的數據模板不同的ComponentResourceKey。正如你可以看到其中一個鍵附加了一個2。
在我的本地:資源類我有以下是我正在使用的ComponentResourceKey。
public static ComponentResourceKey RequirementResourceRelationListTemplateKey {
get {
return new ComponentResourceKey(typeof(Resources), "RequirementResourceRelationListTemplate");
}
}
public static ComponentResourceKey RequirementResourceRelationListTemplate2Key {
get {
return new ComponentResourceKey(typeof(Resources), "RequirementResourceRelationListTemplate2");
}
}
這個作品,如果我只在那裏的DataTemplates之一,但一旦我添加了第二個,我得到的是說,一個例外:
Item has already been added. Key in dictionary: 'DataTemplateKey(HR.TrackingTool.Model.RequirementResourceRelation)' Key being added: 'DataTemplateKey(HR.TrackingTool.Model.RequirementResourceRelation)'
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at System.Windows.ResourceDictionary.SetKeys(IList`1 keyCollection, IServiceProvider serviceProvider)
at System.Windows.ResourceDictionary.SetDeferrableContent(DeferrableContent deferrableContent)
at System.Windows.Baml2006.WpfSharedBamlSchemaContext.<Create_BamlProperty_ResourceDictionary_DeferrableContent>b__168(Object target, Object value)
at System.Windows.Baml2006.WpfKnownMemberInvoker.SetValue(Object instance, Object value)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(XamlMember member, Object obj, Object value)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value)
看來,資源字典忽略的關鍵時添加一個DataTemplate。 ResourceDictionary在使用ComponentRelationKey時是否忽略關鍵屬性?
任何解決此異常的方法?
謝謝,勞爾
令人敬畏的工作。我已經將此作爲bug提交給Microsoft。 https://connect.microsoft.com/VisualStudio/feedback/details/581761/resource-dictionary-ignores-componentresourcekey-when-adding-a-datatemplate?wa=wsignin1.0 – HaxElit 2010-08-02 14:18:27
此錯誤仍然有效。難以置信!!我將TextBlock的兩種樣式添加到應用程序資源字典中。陷入這個錯誤。完全令人沮喪。我想用我的鍵盤粉碎我的屏幕。微軟吹。期。 – 2013-11-19 10:13:53
這就是說,[這](http://stackoverflow.com/questions/2040804/xaml-mergeddictionaries-throwing-xmlparseexception-item-has-already-been-adde)爲我解決了它。我失去了太多的頭髮。 – 2013-11-19 10:19:32