【问题标题】:WPF gradual change in colorWPF渐变颜色
【发布时间】:2014-06-11 08:42:07
【问题描述】:

我正在使用 WPF 开发一个简单的游戏。我需要在蓝色、绿色、黄色、红色等之间逐渐改变画笔的颜色,而颜色不会出现明显的明显变化。

有没有办法可以使用颜色值来实现这一点?我尝试在蓝色和绿色之间使用 BlueGreen 等中间颜色,但它仍然不是很平滑。 GradientBrush 没有帮助,就好像有不同颜色的笔触一样。这些线条最终看起来像一串彩色珍珠。

谢谢!

【问题讨论】:

  • 你能告诉我们你做了什么吗?
  • 你将不得不使用故事板并在某个触发器上应用一些动画来实现漂亮的平滑颜色过渡
  • 请显示一些代码。你需要渐变还是动画?
  • 嗨,我不需要动画...我正在寻找渐变;并且颜色的变化是动态发生的,所以我不能使用 XAML。

标签: c# wpf linear-gradients brush lineargradientbrush


【解决方案1】:

本示例展示了如何使用 LinearGradientBrush 类在运行时使用线性渐变在画布内绘制线条。

Xaml

<Window x:Class="Example.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Canvas  Name="paintSurface" MouseDown="Canvas_MouseDown_1" MouseMove="Canvas_MouseMove_1" >
            <Canvas.Background>
                <SolidColorBrush Color="Red" Opacity="0"/>
            </Canvas.Background>
        </Canvas>
    </Grid>
</Window>

代码隐藏

 public partial class MainWindow : Window
    {

        Point currentPoint = new Point();

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Canvas_MouseDown_1(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (e.ButtonState == MouseButtonState.Pressed)
                currentPoint = e.GetPosition(this);
        }

        private void Canvas_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                Line line = new Line();
                // Create a diagonal linear gradient with four stops.   
                LinearGradientBrush myLinearGradientBrush =
                    new LinearGradientBrush();
                myLinearGradientBrush.StartPoint = new Point(0, 0);
                myLinearGradientBrush.EndPoint = new Point(1, 1);
                myLinearGradientBrush.GradientStops.Add(
                    new GradientStop(Colors.Yellow, 0.0));
                myLinearGradientBrush.GradientStops.Add(
                    new GradientStop(Colors.Red, 0.25));
                myLinearGradientBrush.GradientStops.Add(
                    new GradientStop(Colors.Blue, 0.75));
                myLinearGradientBrush.GradientStops.Add(
                    new GradientStop(Colors.LimeGreen, 1.0));
                line.Stroke = myLinearGradientBrush;
                line.X1 = currentPoint.X;
                line.Y1 = currentPoint.Y;
                line.X2 = e.GetPosition(this).X;
                line.Y2 = e.GetPosition(this).Y;

                currentPoint = e.GetPosition(this);

                paintSurface.Children.Add(line);
            }
        }
    }

【讨论】:

  • 感谢莫兹!我试过这种方法。这样做的一个缺点是我需要在填充之前绘制矩形。在我的例子中,用户可以在运行时使用鼠标光标绘制线条,我需要逐渐改变线条颜色。在这种情况下我也可以使用 LinearGradientBrush 吗?
  • 嗨莫兹!感谢您的代码。但我已经尝试过了,问题在于线条是一系列笔触。所以对用户来说,这条线似乎是由不同颜色的珍珠组成的。我正在寻找的是与 Gradient 非常相似的东西,但它可以在运行时工作。即颜色逐渐变化,然后又回到原来的颜色等等。 (全部在运行时)
  • 你可以添加你想要的图片吗
  • 如果我的评论不清楚,只需设置 line.StrokeThickness = 50;和 line.StrokeStartLineCap = PenLineCap.Round。您可以观察到一系列渐变点,它们不会产生非常令人愉悦的渐变。
  • 嗨moez,根据你的建议,我上传了一张图片:[IMG]i62.tinypic.com/eitn5d.png[/IMG]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多