本帖最后由 wxz86982782 于 2011-09-25 01:22:58 编辑

解决方案 »

  1.   

    wpfprivate void button1_Click(object sender, RoutedEventArgs e)
    {
         //为WPF应用程序设置渐变的背景颜色
         this.Background = (Brush)TryFindResource("MyGradientBackground");
    }
    其中,TryFindResource()方法可找到创建的资源,语法格式如下:
    public Object TryFindResource(Object resourceKey)
    参数Object resourceKey表示要查找的资源的键标识符,该方法的返回值表示找到的资源,如未找到,则返回Null引用。
    接着创建一个LinearGradientBrush渐变色画笔资源MyGradientBackground。完成后的Window1.xaml文件的内容如下所示:
    <Window x:Class="WpfApplication5.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <Window.Resources>
            <LinearGradientBrush x:Key="MyGradientBackground"
                                 StartPoint="0,0"
                                 EndPoint="1,1">
                <GradientStop Color="Yellow" Offset="0.0"/>
                <GradientStop Color="Red" Offset="0.25"/>
                <GradientStop Color="Blue" Offset="0.75"/>
                <GradientStop Color="LimeGreen" Offset="1.0"/>
            </LinearGradientBrush>
        </Window.Resources>
        <Button Height="23" Name="button1" Width="200" Click="button1_Click">为WPF应用程序设置渐变的背景颜色</Button>
    </Window>
      

  2.   


    private void Form1_Paint(object sender, PaintEventArgs e)
    {
    Point center = new Point(245, 200); // 圆环中心
    int r = 100; // 半径(外径)
    int w = 50; // 环径(=外径-内径)
    float startAngle = 50f; // 起始角度
    float sweepAngle = 270f; // 扇区扫角 Graphics g = this.CreateGraphics(); Rectangle bound = new Rectangle(center, new Size(0, 0));
    bound.Inflate(r, r); GraphicsPath gPath = new GraphicsPath();
    gPath.AddPie(bound, startAngle, sweepAngle);
    gPath.AddPie(Rectangle.Inflate(bound, -w, -w), startAngle, sweepAngle); GraphicsPath bPath = new GraphicsPath();
    bPath.AddEllipse(bound);
    bPath.AddEllipse(Rectangle.Inflate(bound, -w, -w)); PathGradientBrush brush = new PathGradientBrush(bPath);
    Blend blend = new Blend();
    blend.Factors = new float[] { 0, 1, 0, 0 };
    blend.Positions = new float[] { 0, w / 2f / r, w / 1f / r, 1 };
    brush.Blend = blend; brush.CenterColor = Color.Yellow;
    brush.SurroundColors = new Color[] { Color.Black }; g.FillPath(brush, gPath); brush.Dispose();
    g.Dispose();
    }
      

  3.   

    不知道你要什么效果的
                    GraphicsPath gpath = new GraphicsPath();
                    float f = 0.0F;
                    float x1, y1, x2, y2;
                    Rectangle rec1 = new Rectangle(145, -100, 200, 200);
                    gpath.AddLine(145, 0, 195, 0);
                    gpath.AddArc(rec1, 90.0F + f, 90.0F - f);
                    rec1 = new Rectangle(195, -50, 100, 100);
                    gpath.AddArc(rec1, 90.0F + f, 90.0F - f);
                    f = f * (float)Math.PI / 180; // 角度与弧度的转换
                    y1 = 100.0F * (float)Math.Cos(f);
                    x1 = 100.0F * (1.0F - (float)Math.Sin(f)) + 145.0F;
                    y2 = 50.0F * (float)Math.Cos(f);
                    x2 = 50.0F * (1.0F - (float)Math.Sin(f)) + 195.0F;
                    gpath.AddLine(x1, y1, x2, y2);                //Brush myBrush = new LinearGradientBrush(new Rectangle(145, 0, 200, 100), Color.Yellow, Color.Black, 45);
                    Brush myBrush = new LinearGradientBrush(new Rectangle(145, 0, 200, 100), Color.Yellow, Color.Black,LinearGradientMode.BackwardDiagonal);
                    Graphics gobj = this.CreateGraphics();
                    gobj.FillPath(myBrush, gpath);
                    gobj.Dispose();
      

  4.   

    谢谢 但我不懂呢,我只了解点winFORM应用程序 这个不大懂
      

  5.   

    主要原理是:用一个颜色从圆形中心开始的渐变刷,去填充一段和该圆同心的环形弧。圆形渐变刷的做法看msdn上的第一个例子就是:
    http://msdn.microsoft.com/zh-cn/library/7fswd1t7.aspx但是例子上的渐变效果是从圆心开始均匀变化到边界,而作为圆环需要的效果是:
    从内圈-〉均匀变化到环中心线-〉再均匀变化到外圈轮廓,所以重点是下面这两句:--> blend.Positions = new float[] { 0, w / 2f / r, w / 1f / r, 1 };
    这句定义了渐变色分成三段:
    从0- w/2f/r是外圈到中心线,w/2f/r是中心线对圆形半径的百分比
    从w/2f/r - w/1f/r是环形中心线到内圈,w/1f/r是内圆半径对外圆半径的百分比
    最后w/1f/r - 1是内圈到圆心--> blend.Factors = new float[] { 0, 1, 0, 0 };
    这句定义了上面说的三段分别采用什么样的渐变方式:
    第一段:0-1,表示外圈到中心线是黑-〉黄,0:周边色,1:中心色
    第二段:1-0,表示中心线到内圈是黄->黑
    第三段:0-0,内圈里面的颜色,因为我们画的是环,所以用不上,随便定义,这里定的是黑色有了上面的定义,就可以画出从圆环中心线开始向两边变化的渐变圆,再用这样一个刷子去填充一段弧形,就得到最终的效果。你可以调整这些参数,看看不同的效果了解这些参数的含义,也可以把下面这句:
    g.FillPath(brush, gPath);
    改成:
    g.FillPath(brush, bPath);
    这样你就能看到画出整个完整的圆形出来是什么样子。这个效果也可以用RadialGradientBrush做出来,可以看下msdn上的相关说明,在最下面的示例关于Gradient Stop有比较清晰的图示,原理是一样的:
    http://msdn.microsoft.com/zh-cn/library/ms635489(v=VS.85).aspx