WPF XAML-向目标行定义的资源字典中添加多种样式

Bre*_*ent 3 wpf resourcedictionary

感谢您的想法,以帮助相对的初学者了解WPF。

我试图在WAML应用程序的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>
Run Code Online (Sandbox Code Playgroud)

稍后将在像这样的网格中使用:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="30" />
        <RowDefinition Style="{StaticResource hideIfNotDischarged}" />
        ...
Run Code Online (Sandbox Code Playgroud)

但是,如果有多个针对Type RowDefinition的样式元素,并且ResourceDictionary嵌套在MergedDictionary中(即使仅合并了一个子ResourceDictionary),则应用程序将失败

System.Windows.ResourceDictionary.DeferrableContent:项目已添加

也就是说,尽管这两种样式具有不同的键,但是资源字典试图添加名称完全基于目标类型的字典项(并忽略键)。

我将如何克服这些问题方面的任何帮助将不胜感激。

sa_*_*213 6

Xaml解析所以我觉得它的检查从左到右ResourceDictionary或其他MergedDictionaries如果TargetType(如果没有X默认标识:使用密钥)存在,它实现它的前x:Key标识

尝试将设置x:KeyTargetType

这可能是Xaml解析器中的错误,也可能是设计使然,可能值得一看Microsoft Connect