如何将静态资源设置为内容属性(默认内容)

How to set a static resource as content property (default content)

我有一个 prism 的 InteractionRequestTrigger 触发动作实现,看起来像这样:

<prism:InteractionRequestTrigger SourceObject="{Binding MyRequest}" >
    <infInt:PopupWindowAction>...
    </infInt:PopupWindowAction>
</prism:InteractionRequestTrigger>

现在我想将 PopupWindowAction 提取到静态资源中,因此它看起来像这样:

<Window.Resources>
    <infInt:PopupWindowAction x:Key="Foo" >
      ...
    </infInt:PopupWindowAction>
</Window.Resources>

<prism:InteractionRequestTrigger SourceObject="{Binding MyRequest}" >
   --- use the resource Foo ---
</prism:InteractionRequestTrigger>

如何使用其中包含密钥 Foo 的静态资源?

通过反思 InteractionRequestTrigger 我发现它的 ContentProperty 在 System.Windows.Interactivity.TriggerBase 中设置为 [ContentProperty("Actions")]

但是因为它只有一个 getter,我不能使用 Actions 作为参数来设置 foo:

  <prism:InteractionRequestTrigger Actions="{StaticResource Foo}" SourceObject="{Binding MyRequest}" />

Error 1 The property "Actions" does not have an accessible setter.
Error 3 'Actions' property is read-only and cannot be set from markup.

如何使用Foo

解决方法很简单。使用 StaticResourceExtension class.

<i:Interaction.Triggers>
    <prism:InteractionRequestTrigger SourceObject="{Binding MyRequest}">
        <StaticResource ResourceKey="Foo"/>
    </prism:InteractionRequestTrigger>
</i:Interaction.Triggers>