WPF DataTrigger 改变控件颜色

之前这篇博文WPF 做一个指示灯,用 TrueFalse两种情况来进行判断,其实也可以用 int 类型进行多个条件的判断。

XAML:

<Window.DataContext>
    <local:TestVM/>
</Window.DataContext>

<Grid>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <Ellipse Width="50" Height="50">
            <Ellipse.Style>
                <Style TargetType="Ellipse">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding PresentColor}" Value="0">
                            <Setter Property="Shape.Fill" Value="Orange"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding PresentColor}" Value="1">
                            <Setter Property="Shape.Fill" Value="Green"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding PresentColor}" Value="2">
                            <Setter Property="Shape.Fill" Value="Red"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Ellipse.Style>
        </Ellipse>
        <Button Content="换色" Command="{Binding ChangeColorCommand}" Margin="10 0 0 0" Height="30" Width="80"/>
    </StackPanel>        
</Grid>

ViewModel:

public class TestVM : ViewModelBase
{
    private int _PresentColor = 0;
    public int PresentColor
    {
        get { return _PresentColor; }
        set { _PresentColor = value; RaisePropertyChanged(nameof(PresentColor)); }
    }

    private RelayCommand _changeColorCommand;
    public RelayCommand ChangeColorCommand
    {
        get {
            if (_changeColorCommand == null)
                _changeColorCommand = new RelayCommand(ChangeColor);
            return _changeColorCommand; }
        set { _changeColorCommand = value; RaisePropertyChanged(nameof(ChangeColorCommand)); }
    }


    private void ChangeColor()
    {
        if (PresentColor < 2)
            PresentColor++;
        else
            PresentColor = 0;
    }
}
posted @   double64  阅读(371)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示