【问题标题】:Can I omit the EventTrigger.Actions?我可以省略 EventTrigger.Actions 吗?
【发布时间】:2016-07-15 07:14:49
【问题描述】:

我正在将 WPF 与 MVVM 模式和 Prism 一起使用,并且我正在使用 InteractionRequests 来显示对话框。

当我定义 InteractionTriggers 及其动作时,我是这样定义它们的:

<i:Interaction.Triggers>
[Other event triggers]
    <i:EventTrigger EventName="Raised" SourceObject="{Binding SomeConfirmationInteractionRequest}">
        <i:EventTrigger.Actions>
            <windowActions:DialogWindowAction />
        </i:EventTrigger.Actions>
    </i:EventTrigger>
</i:Interaction.Triggers>

现在我正在检查我的 EventTriggers,并意识到,我缺少 &lt;i:EventTrigger&gt; 内的 &lt;i:EventTrigger.Actions&gt; 标记之一:

<i:EventTrigger EventName="Raised" SourceObject="{Binding SomeConfirmationInteractionRequest}">
    <windowActions:DialogWindowAction />
</i:EventTrigger>

我更困惑的是我的这部分代码有效,并且没有问题。

我的问题:

为什么可以直接省略?

我可以不放吗?或者留下EventTrigger.Actions标签会改变我还没有意识到/体验过的东西吗?

【问题讨论】:

    标签: c# wpf xaml mvvm prism


    【解决方案1】:

    是的,它可以安全地省略。

    如果您查看TriggerBase 类(在EventTrigger 的继承树上),您会看到它有一个属性[ContentProperty("Actions")]。这告诉 WPF 将 Actions 属性视为 XAML 中元素的直接子元素。

    这在 WPF 中被广泛使用,例如ContentControls 有Content 属性(所以你可以写&lt;Button&gt;&lt;Image/&gt;&lt;/Button&gt; 而不是&lt;Button&gt;&lt;Button.Content&gt;&lt;Image/&gt;&lt;/Button.Content&gt;&lt;/Button&gt;),Panels 有Children 属性作为它们的内容,等等。

    【讨论】:

    • [ContentProperty("Actions")] - 太棒了!这就是为什么 xaml 有这么多描述同一事物的方式,我不知道!谢谢你:)
    • 您可以使用 IntelliSense 查看在某个元素下允许写入的内容。这将是正确的……大多数时候。此外,如果它编译并运行,它可能没问题;)
    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2014-06-19
    • 2013-08-21
    相关资源
    最近更新 更多