gpt4 book ai didi

wpf - (多个)MultiDataTrigger 与转换器的效率

转载 作者:行者123 更新时间:2023-12-02 08:26:51 24 4
gpt4 key购买 nike

我目前正在分析一些使用广泛使用 MultiDataTriggers 的样式的 XAML。 (每种样式 8-10 个多数据触发器,每个触发器有 4-6 个条件)。当看到这个时,我正在考虑使用 converter 是否会更有效。 (或 multi value converter ),特别是当 MultiDataTriggers 无法调试时。

任何人都可以权威地说明 MultiDataTriggers 是如何编译的吗?据我了解,Conditions are ANDed综合起来,这个编译方式是不是有短路的特点?

多个 MultiDataTriggers 怎么样?它们是否短路,导致第一个完全满足导致评估停止?还是都评价,如果几个都满意,最后一个获胜?

最佳答案

触发器是从上到下评估的。它适用于所有类型的触发器(Trigger、DataTrigger、MultiTrigger 和 MutliDataTrigger)。

What about multiple MultiDataTriggers? Are they short circuited so that the first one fully satisfied causes evaluation to stop? Or are they all evaluated with the last one winning if several are satisfied?

如上所述,触发器是从上到下评估的。因此,如果第一个触发器满足所有条件并不意味着不会评估进一步的触发器。评估应用于已更改属性的所有触发器,如果​​其中任何两个在触发器内设置相同的属性,则最后一个触发器始终获胜覆盖第一个触发器设置的属性

<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnable}" Value="True">
<Setter Property="Text" Value="Test1"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsEnable}" Value="True">
<Setter Property="Text" Value="Test2"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>

IsEnable 计算结果为 true 时,文本将始终为 Test2

<小时/>

Can anyone authoritatively state how MultiDataTriggers are compiled? I understand that the Conditions are ANDed together, is this compiled in such a way that short cutting is featured?

是的,MultiDataTrigger 中具有捷径功能,即如果第一个条件评估为 false,则不会检查第二个条件。此示例验证了这一点 -

<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsEnable,
Converter={StaticResource SingleValueConverter}}"
Value="True"/>
<Condition Binding="{Binding IsEnable,
Converter={StaticResource SingleValueConverter}}"
Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Text" Value="Test"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>

在这两种情况下都会应用转换器,但如果 IsEnabledfalse转换器只会命中一次,因为第一个条件的计算结果为错误的。但如果 IsEnabledtrue,由于成功满足第一个条件,转换器会被命中两次

关于wpf - (多个)MultiDataTrigger 与转换器的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19888983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com