如何根据wpf中的值使特定颜色变暗或变亮?

我正在开发wpf应用程序。 我在C#中有Color对象的实例。 假设我有红色Color对象的实例,即Color c = Color.FromArgb(255,255,0,0)现在假设我有一个值,范围从1到10.所以根据这个值,我想改变’的颜色’ c’对象。 我希望浅红色为1,暗红色为10.浅红色变为暗,因为值从1增加。如何在C#中为wpf应用程序执行此操作? 能否请您提供我可以解决上述问题的任何代码或链接?

您可以尝试简单地将红色,绿色和蓝色分量乘以某个系数。

 public static Color ChangeLightness(this Color color, float coef) { return Color.FromArgb((int)(color.R * coef), (int)(color.G * coef), (int)(color.B * coef)); } 

或者,如果您想使用1到10之间的整数值而不是系数:

 private const int MinLightness = 1; private const int MaxLightness = 10; private const float MinLightnessCoef = 1f; private const float MaxLightnessCoef = 0.4f; public static Color ChangeLightness(this Color color, int lightness) { if (lightness < MinLightness) lightness = MinLightness; else if (lightness > MaxLightness) lightness = MaxLightness; float coef = MinLightnessCoef + ( (lightness - MinLightness) * ((MaxLightnessCoef - MinLightnessCoef) / (MaxLightness - MinLightness)) ); return Color.FromArgb(color.A, (int)(color.R * coef), (int)(color.G * coef), (int)(color.B * coef)); } 

假设您使用的滑块最小值为1 ,最大值为10 。 您可以将该值乘以25.5 (255 / max value) 。 然后,从最大值(255)中减去该答案,并将其用作红色值。

 double newRedValue = 255 - (slider.Value * (255 / slider.Maximum)); int redValue = Convert.ToInt32(newRedValue); Color c = Color.FromArgb(redValue ,255,0,0) 

您可以使用常量值替换255 / slider.Maximum ,因为它可能保持不变。 上面的公式将产生反转效果,因此滑块值越低,红色的阴影越亮。 当然,值为10将导致red0 ,因此如果您不希望红色组件为低,则可以添加最小值。

一个更清洁的解决方案是并置2个矩形:一个是你想要的颜色,另一个是黑色。

然后在黑色矩形上使用Opacity来使底色变暗/变亮。

它看起来像:

     

当然, colorModifierPercentage必须是介于0和1之间的数字,而矩形可以是任何形状 。

如果你有一定数量的值,那么Style DataTrigger呢?

https://www.google.co.uk/search?q=c%23+wpf+style+datatrigger

  

然后,如果您需要重用该样式,那么您可以放入窗口/ usercontrol的部分。