XAML上のDictionaryにStaticResourceを使う方法
Windows10、Visual Studio 2017、.NET Framework 4.5で、以下のようなDataTemplateSelectorを作成しました。
[ContentProperty("DataTemplateTable")]
public class TypeToDataTemplateSelector : DataTemplateSelector
{
public TypeToDataTemplateDictionary DataTemplateTable { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
// DataTemplateTableからDataTemplateを取得する処理
}
}
public class TypeToDataTemplateDictionary : Dictionary<Type, DataTemplate> { }
以下のコードでは、問題なく動作していました。
<local:TypeToDataTemplateSelector x:Key="TypeToDataTemplateSelector">
<local:TypeToDataTemplateDictionary>
<DataTemplate x:Key="{x:Type local:ViewModelA}" DataType="local:ViewModelB">
<TextBlock Text="ViewModelA"/>
</DataTemplate>
<DataTemplate x:Key="{x:Type local:ViewModelB}" DataType="local:ViewModelB">
<TextBlock Text="ViewModelB"/>
</DataTemplate>
<DataTemplate x:Key="{x:Type local:ViewModelC}" DataType="local:ViewModelC">
<TextBlock Text="ViewModelC"/>
</DataTemplate>
</local:TypeToDataTemplateDictionary>
</local:TypeToDataTemplateSelector>
しかし、StaticResourceを使用したときに問題が発生しました。
<DataTemplate x:Key="DataTemplateA" DataType="local:ViewModelA">
<TextBlock Text="ViewModelA"/>
</DataTemplate>
<DataTemplate x:Key="DataTemplateB" DataType="local:ViewModelB">
<TextBlock Text="ViewModelB"/>
</DataTemplate>
<DataTemplate x:Key="DataTemplateC" DataType="local:ViewModelC">
<TextBlock Text="ViewModelC"/>
</DataTemplate>
<local:TypeToDataTemplateSelector x:Key="TypeToDataTemplateSelector">
<local:TypeToDataTemplateDictionary>
<StaticResource x:Key="{x:Type local:ViewModelA}" ResourceKey="DataTemplateA"/>
<StaticResource x:Key="{x:Type local:ViewModelB}" ResourceKey="DataTemplateB"/>
<StaticResource x:Key="{x:Type local:ViewModelC}" ResourceKey="DataTemplateC"/>
</local:TypeToDataTemplateDictionary>
</local:TypeToDataTemplateSelector>
ビルドは通るのですが、実行時にXamlObjectWriterException: ''StaticResourceHolder' オブジェクトにキー値がありません。' 行番号 'xx'、行位置 'xx'。
と例外が発生してしまいます。
これをどうにかして回避し、DictionaryにStaticResourceを使うことはできないでしょうか。