WPF颜色逐渐变化

时间:2014-06-11 08:42:08

标签: c# wpf linear-gradients brush lineargradientbrush

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

此示例显示如何使用LinearGradientBrush类在运行时使用线性渐变在canavas中绘制线条。

的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);
            }
        }
    }