zoukankan      html  css  js  c++  java
  • 实现按钮的按下和鼠标停留的颜色自动生成

    1.为button模板增加触发器:

    <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" TargetName="border">
                        <Setter.Value>
                            <MultiBinding Converter="{StaticResource mouseOverColorConverter}">
                                <Binding RelativeSource="{RelativeSource Mode=TemplatedParent}" Path="MouseOverBackground" ></Binding>
                                <Binding RelativeSource="{RelativeSource  Mode=TemplatedParent}" Path="Background" ></Binding>
                            </MultiBinding>
                        </Setter.Value>
                    </Setter>
                </Trigger>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Background" TargetName="border" >
                        <Setter.Value>
                            <MultiBinding Converter="{StaticResource pressColorConverter}">
                                <Binding RelativeSource="{RelativeSource Mode=TemplatedParent}" Path="PressedBackground" ></Binding>
                                <Binding RelativeSource="{RelativeSource  Mode=TemplatedParent}" Path="Background" ></Binding>
                            </MultiBinding>
                        </Setter.Value>
                    </Setter> 
                </Trigger>
    </ControlTemplate.Triggers>

    2.增加多值转换器:

    public class PressColorConverter : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                if ((values[0] as SolidColorBrush).Color == Colors.Blue)//默认蓝色则自动生成
                {
                    var c = System.Drawing.ColorTranslator.FromHtml(values[1].ToString());
                    var c1 = StaticFunc.ChangeColor(c, -0.2f);
                    return new SolidColorBrush(Color.FromArgb(c1.A, c1.R, c1.G, c1.B));
                }
                else
                {
                    return values[0];
                }
            }
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    
        public class MouseOverColorConverter : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                if ((values[0] as SolidColorBrush).Color == Colors.Blue)
                {
                    var c = System.Drawing.ColorTranslator.FromHtml(values[1].ToString());
                    var c1 = StaticFunc.ChangeColor(c, -0.1f);
                    return new SolidColorBrush(Color.FromArgb(c1.A, c1.R, c1.G, c1.B));
                }
                else
                {
                    return values[0];
                }
            }
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }

    3.颜色转换函数:

     public class StaticFunc
        {
            public static Color ChangeColor(Color color, float correctionFactor)
            {
                float red = (float)color.R;
                float green = (float)color.G;
                float blue = (float)color.B;
                if (correctionFactor < 0)
                {
                    correctionFactor = 1 + correctionFactor;
                    red *= correctionFactor;
                    green *= correctionFactor;
                    blue *= correctionFactor;
                }
                else
                {
                    red = (255 - red) * correctionFactor + red;
                    green = (255 - green) * correctionFactor + green;
                    blue = (255 - blue) * correctionFactor + blue;
                }
                if (red < 0) red = 0;
                if (red > 255) red = 255;
                if (green < 0) green = 0;
                if (green > 255) green = 255;
                if (blue < 0) blue = 0;
                if (blue > 255) blue = 255;
                return Color.FromArgb(color.A, (int)red, (int)green, (int)blue);
            }
        }
  • 相关阅读:
    设计模式学习--面向对象的5条设计原则之单一职责原则--SRP
    设计模式学习--面向对象的5条设计原则(转)
    oracle 存储过程创建报错 Procedure created with compilation errors
    查看临时表空间占用最多的用户与SQL
    查看表空间文件以及利用率、修改、删除表空间文件大小
    aliyun阿里云alibabaMaven仓库地址——加速你的maven构建
    快速配置java环境变量
    oracle 月份中日的值必须介于 1 和当月最后一日之间
    Oracle 修改dmp的表空间
    oracle 空表导出dmp会报错
  • 原文地址:https://www.cnblogs.com/xienb/p/10142143.html
Copyright © 2011-2022 走看看