c# - XAML中设置属性的顺序是什么?

标签 c# wpf xaml

我有一个 TextBlock,其中两个属性(TextForeground)绑定(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)到 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 转换器。

关于c# - XAML中设置属性的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52331809/

相关文章:

wpf - 单击滚动条上方或下方的拇指不会滚动

c# - NullReferenceException,没有堆栈跟踪...从哪里开始?

c# - WPF/XAML 将元素的宽度绑定(bind)到屏幕大小的一部分

c# - 如何使用自定义路由模式访问 url?

c# - 可视化 WPF 控件中的对象属性

c# - 将 DataTable 值转换为通用类型

c# - 将模型属性的值作为 ajax 参数发送

wpf - 如何在 XAML 中将一个元素的属性绑定(bind)到另一个元素的属性

c# - 属性 "Style"只能设置一次

c# - 处理在 xaml 中创建的控件