感谢您在帮助一个初学者了解WPF方面的想法。
我正在尝试在XAML文件中使用以下样式模板,用于WPF应用程序:
然而,如果有超过1个样式元素针对Type RowDefinition,并且ResourceDictionary嵌套在MergedDictionary中(即使只有一个子ResourceDictionary进行合并),应用程序将失败,并显示System.Windows.ResourceDictionary.DeferrableContent:Item has already been added。换句话说,尽管这2个样式具有不同的键,但资源字典仍然试图添加一个基于目标类型的纯名称字典项(忽略键)。如何克服此问题,非常感谢您的帮助。
我正在尝试在XAML文件中使用以下样式模板,用于WPF应用程序:
<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}" />
...
然而,如果有超过1个样式元素针对Type RowDefinition,并且ResourceDictionary嵌套在MergedDictionary中(即使只有一个子ResourceDictionary进行合并),应用程序将失败,并显示System.Windows.ResourceDictionary.DeferrableContent:Item has already been added。换句话说,尽管这2个样式具有不同的键,但资源字典仍然试图添加一个基于目标类型的纯名称字典项(忽略键)。如何克服此问题,非常感谢您的帮助。
RowDefinition
样式。我刚刚将您上面的两个样式复制到 ResourceDictionary 中,编译通过,并且两个样式都可以应用。我认为您还有另一组这些样式,或者 VS 存在缓存问题,请尝试清理并重新构建解决方案。 - sa_ddam213TargetType
之前声明x:key
,以避免ResourceDictionary
在意识到它具有x:Key
之前检查TargetType
是否存在。 - sa_ddam213