在 XAML 中设置属性的顺序是什么?



我有一个TextBlock,其中包含两个属性(TextForeground(绑定到同一个ViewModel属性。

两者都有转换器。其中一个转换器检查Text属性,如果值为NaN,则返回"破折号"。另一个检查值是否高于、低于或等于零,并相应地将前景设置为不同的颜色。

XAML 示例:

<TextBlock>
<TextBlock.Text>
<Binding Path="AvgDistance" StringFormat="{}{0:N1}"                        
Converter="{x:Static converter:ValueToDash.Instance}"/>
</TextBlock.Text>        
<TextBlock.Foreground>                                                    
<MultiBinding Converter="{x:Static converter:ValueToColor.Instance}">                                                       
<Binding Path="AvgDistance"/>
<Binding ElementName="currentPeriod" Path="IsChecked" />
</MultiBinding>
</TextBlock.Foreground>  
</TextBlock>

现在我需要在 ValueToColor 转换器之前触发 ValueToDash 转换器,但反之亦然。

Foreground属性似乎总是先设置,然后才设置Text属性。

为什么会这样?是否可以颠倒设置顺序?

不应依赖于设置属性的顺序。

相反,您可以做的是向MultiBinding添加另一个绑定,该绑定绑定到TextBlockText属性:

<TextBlock>
<TextBlock.Text>
<Binding Path="AvgDistance" StringFormat="{}{0:N1}"                        
Converter="{x:Static converter:ValueToDash.Instance}"/>
</TextBlock.Text>
<TextBlock.Foreground>
<MultiBinding Converter="{x:Static converter:ValueToColor.Instance}">
<Binding Path="AvgDistance"/>
<Binding ElementName="currentPeriod" Path="IsChecked" />
<Binding Path="Text" RelativeSource="{RelativeSource Self}"/>
</MultiBinding>
</TextBlock.Foreground>
</TextBlock>

然后,每当Text属性设置为某个新值时,就会(再次(调用ValueToColor转换器。

最新更新