比較的初心者が WPF を理解するのを手伝ってくれてありがとう。
WPF アプリケーションの XAML ファイルで次のスタイル テンプレートを使用しようとしています。
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<Style TargetType="{x:Type RowDefinition}"
x:Key="hideIfNotDischarged">
<Style.Triggers>
<DataTrigger Binding="{Binding DischargedBy28Days,
Mode=OneWay}" Value="false">
<Setter Property="Height" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type RowDefinition}"
x:Key="hideIfOutcomeKnownAndAlive">
<Style.Triggers>
<DataTrigger Binding="{Binding IsKnownDead,
Mode=OneWay}" Value="false">
<Setter Property="Height" Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
後で次のようにグリッドで使用されます。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="30" />
<RowDefinition Style="{StaticResource hideIfNotDischarged}" />
...
ただし、Type を対象とする複数のスタイル要素があり、RowDefinition
かつ ALSOResourceDictionary
内にネストされている場合 (マージ
MergedDictionary
する子が 1 つしかない場合でも)、アプリケーションは次のエラーで失敗します: Item has already been added.ResourceDictionary
System.Windows.ResourceDictionary.DeferrableContent
つまり、2 つのスタイルが異なるキーを持っているという事実にもかかわらず、リソース ディクショナリは、純粋にターゲット タイプに基づいた名前のディクショナリ アイテムを追加しようとしています (キーは無視されます)。
これを克服する方法についての助けをいただければ幸いです。