我有一个 TextBlock
,其中两个属性(Text
和 Foreground
)绑定(bind)到同一个 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>
现在我需要 ValueToDash 转换器在 ValueToColor 转换器之前触发,但反之亦然。
Foreground
属性似乎总是首先设置,然后才设置 Text
属性。
为什么会这样呢?是否可以颠倒设置顺序?
最佳答案
您不应依赖属性设置的顺序。
您可以做的是向 MultiBinding
添加另一个绑定(bind),该绑定(bind)绑定(bind)到 TextBlock
的 Text
属性:
<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
转换器。
关于c# - XAML中设置属性的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331809/