WPF将布尔值转换为彩色字符串

dan*_*y89 3 c# wpf xaml colors

我坚持"简单"的转换.我有一个方法.它检查连接.如果建立了连接,则更改我的viewmodel的boolean属性.我想要做的是在我的表单上显示彩色字符串(红色"连接失败"或绿色"连接建立"取决于布尔属性)但我不知道如何做到这一点.

Nic*_*ter 6

你有两个选择,因为你没有提供任何具体的代码,我将只提供一些资源:

第一个选项是使用触发器更新文本的属性.这将在xaml中实现,只需观察绑定属性以获取特定值(在您的情况下为true或false)并相应地更新颜色.这也是@Kylo-Ren所做的.有关这方面的信息可以在这里找到:

http://www.wpf-tutorial.com/styles/trigger-datatrigger-event-trigger/

另一种选择是使用IValueConverter接口并将布尔值转换为颜色.这就是@Stefan所做的.更多信息:

http://www.codeproject.com/Tips/868163/IValueConverter-Example-and-Usage-in-WPF

如果您只拥有该属性可以采用的非常有限的值范围和/或您想要一次更新多个可视属性,我会推荐第一个版本.

第二个版本更适用于更复杂的转换(例如将完整对象转换为格式化字符串),但不能轻易用于更新多个可视属性.

经验法则:

我想指出一个州=>使用触发器

我想以特定的方式显示对象值(例如Text)=>使用IValueConverter


Kyl*_*Ren 5

使用下面(改变控制类型与你正在使用的):

<TextBox Text="content" >
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ConnectionStatus}" Value="true">
                    <Setter Property="Background" Value="Red"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ConnectionStatus}" Value="false">
                    <Setter Property="Background" Value="Green"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

  • Upvoted,因为简单的状态更改可以使用触发器更好地表示.这可能是出于对xaml变得多么逻辑和混乱的恐惧.这总是有问题的,但此时并非如此. (2认同)
  • @KyloRen,你为什么要使用2个DataTriggers?`<Setter Property ="Background"Value ="Red"/>`在`<Style>`默认情况下,一个`DataTrigger`为'False`(或反之)更短,效果相同 (2认同)
  • @ASh因为我不确定用户是否希望该元素具有默认颜色.:)否则我会在Background属性中给出一个默认颜色,1个数据触发就足够了 (2认同)