感谢您帮助相对初学者理解WPF的想法 .
我试图在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}" />
...
但是,如果有多个样式元素定位类型RowDefinition,并且另外,ResourceDictionary嵌套在MergedDictionary中(即使只有一个子ResourceDictionary要合并),应用程序也会失败
System.Windows.ResourceDictionary.DeferrableContent:已添加项目
也就是说,尽管2个样式具有不同的键,但资源字典试图添加一个纯粹基于目标类型的名称的字典项(并忽略该键) .
任何帮助我如何克服这一点将是非常感谢 .
1 回答
Xaml
是从左到右解析所以我认为它检查ResourceDictionary
或其他MergedDictionaries
如果TargetType
(如果没有使用x:Key则使用默认标识符)在它实现它之前存在x:Key
标识符尝试在
TargetType
之前设置x:Key
.这可能是Xaml解析器中的一个错误,也可能是设计错误,可能值得一看Microsoft Connect