###前提・実現したいこと
UserControlのResourceでいくつかのControlTemplateを定義しています。
ここでは2つのテンプレートを用意して、それぞれ複数のTextBlockが配置されるようにして文字色を赤、青になるようにしています。
TextBlockのスタイルを一括で設定するためにKeyを設定せず、TargetTypeのみ設定しています。
これを別のUserControlでも参照できるようにResourceDictionaryへ移動したところ
実行時にキーの重複登録の例外エラーとなってしまいました。
デザイナでは問題なく意図した表示になります。
ResourceDictionaryではこのようなやり方はダメなのでしょうか?
XAML
1<UserControl.Resources> 2 <ControlTemplate x:Key="ContentTemplate1" TargetType="{x:Type ContentControl}"> 3 <ControlTemplate.Resources> 4 <Style TargetType="TextBlock"> 5 <Setter Property="Foreground" Value="Red"> 6 </Style> 7 </ControlTemplate.Resources> 8 <StackPanel> 9 <!--たくさんのTextBlockがあったとして一括でスタイルを適用したい--> 10 <TextBlock Text="Text"/> 11 <TextBlock Text="Text"/> 12 <TextBlock Text="Text"/> 13 <StackPanel> 14 </ControlTemplate> 15 <ControlTemplate x:Key="ContentTemplate2" TargetType="{x:Type ContentControl}"> 16 <ControlTemplate.Resources> 17 <Style TargetType="TextBlock"> 18 <Setter Property="Foreground" Value="Blue"> 19 </Style> 20 </ControlTemplate.Resources> 21 <StackPanel> 22 <!--たくさんのTextBlockがあったとして一括でスタイルを適用したい--> 23 <TextBlock Text="Text"/> 24 <TextBlock Text="Text"/> 25 <TextBlock Text="Text"/> 26 <StackPanel> 27</ControlTemplate> 28</UserControl.Resources> 29 30<StackPanel> 31 <ContentControl Template={StaticResource ContentTemplate1}/> 32 <ContentControl Template={StaticResource ContentTemplate2}/> 33</StackPanel>
###発生している問題・エラーメッセージ
例外がスローされました: 'System.Windows.Markup.XamlParseException' (PresentationFramework.dll の中) "項目は既に追加されています。辞書のキー: 'System.Windows.Controls.TextBlock' 追加されるキー:'System.Windows.Controls.TextBlock'"
###該当のソースコード
XAML
1<ResourceDictionary> 2 <ResourceDictionary.MergedDictionaries> 3 <ResourceDictionary> 4 <!--ここに先ほどのContentTemplate1とContentTemplate2を移す--> 5 </ResourceDictionary> 6 </ResourceDictionary.MergedDictionaries> 7<ResourceDictionary>
###補足情報(言語/FW/ツール等のバージョンなど)
VisualStudio2015(VB) Community
.Network Framework 4.6.2(WPF)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/20 09:31