【问题标题】:how to change the visual state of a WPF control based on evaluation of other Visual Elements?如何根据对其他视觉元素的评估来更改 WPF 控件的视觉状态?
【发布时间】:2009-09-22 22:55:30
【问题描述】:

我想做以下事情:

<TextBlock Text="{Binding Result}">

我想根据对 Result 的相等性检查为其着色,以视图为中心的方法是什么?我记得读过关于模板选择器的文章,这是正确的选择吗?

示例:

Text="Pass" Color="Green"
Text="Fail" Color="Red"

我希望这是动态的,以便在文本更改时重新评估它。

【问题讨论】:

    标签: c# .net wpf binding


    【解决方案1】:

    您可以在样式中使用触发器:

    <TextBlock Text="{Binding Result}">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Result}" Value="Pass">
                        <Setter Property="Foreground" Value="Green" />
                    </DataTrigger>
    
                    <DataTrigger Binding="{Binding Result}" Value="Fail">
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    

    或者,您可以创建一个 IValueConverter 实现,将字符串转换为画笔(根据您的规则)并直接使用绑定:

    <TextBlock
        Text="{Binding Result}"
        Foreground="{Binding Result,Converter={StaticResource my:ResultBrushConverter}} />
    

    我不会详细介绍此选项,因为我认为纯 XAML 选项是更好的选择。

    【讨论】:

    • 触发方法很有趣,我将开始这样做。 Converter 方法有什么缺点吗?
    • 转换器会更灵活一些,因为它是基于代码的。例如,如果您需要根据文本中的正则表达式模式更改颜色,转换器可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多