none
如何实现扇形的绘制 RRS feed

  • 问题

  • 请问如何实现扇形的绘制。发现很多WPF中的东西都不能用。而且角度不是固定的。所以好像也不能用路径画出来。剪裁又好像只有矩形剪裁。请问有什么方法实现任意角度扇形的绘制。又或者像WIN8.1闹钟那种畸形图像有什么好的思路实现呢?
    2014年6月27日 9:15

答案

  • 你好,我这里还有一些办法可以画扇形。

    具体可以这么做,首先在Blend里面画如下图形,一个圆和一个长方形,同时选中他们之后合并->相减,就可以出一个半圆:

    选择合并->相减,得到一个半圆。之后重复同样的动作,之后仅仅把长方形做一个旋转,再进行相减,就可以得到你想要的扇形。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    • 已标记为答案 MyCMy 2014年7月1日 5:39
    2014年6月30日 2:18
    版主
  • 你好。

    Windows Store 应用中的扇形绘制可以采用Polygon (NameSpace:Windows.UI.Xaml.Shapes;)来进行模拟。

    比如我要绘制一个90度的扇形,半径为100像素:

    Polygon p = new Polygon();
    p.Fill = new SolidColorBrush(Colors.Red);
    p.Points.Add(new Point(100, 100));
    for (int i = 0; i < 90; i++)
    {
        Point point = new Point()
        {
            X = 100 + Math.Sin(i * Math.PI / 180.0) * 100,
            Y = 100 + Math.Cos(i * Math.PI / 180.0) * 100,
        };
        p.Points.Add(point);
    }
    p.Points.Add(new Point(100, 100));
    root.Children.Add(p);

    这样我利用90个点,加上两个相同的端点(Polygon要求Points为封闭集合),完成了扇形的模拟。

    以下是效果图:

    • 已标记为答案 MyCMy 2014年6月30日 1:33
    2014年6月28日 9:04
    版主

全部回复

  • 你好,使用Path类也不行么?

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    • 已标记为答案 MyCMy 2014年6月30日 1:34
    • 取消答案标记 MyCMy 2014年6月30日 1:34
    2014年6月28日 2:54
    版主
  • 你好。

    Windows Store 应用中的扇形绘制可以采用Polygon (NameSpace:Windows.UI.Xaml.Shapes;)来进行模拟。

    比如我要绘制一个90度的扇形,半径为100像素:

    Polygon p = new Polygon();
    p.Fill = new SolidColorBrush(Colors.Red);
    p.Points.Add(new Point(100, 100));
    for (int i = 0; i < 90; i++)
    {
        Point point = new Point()
        {
            X = 100 + Math.Sin(i * Math.PI / 180.0) * 100,
            Y = 100 + Math.Cos(i * Math.PI / 180.0) * 100,
        };
        p.Points.Add(point);
    }
    p.Points.Add(new Point(100, 100));
    root.Children.Add(p);

    这样我利用90个点,加上两个相同的端点(Polygon要求Points为封闭集合),完成了扇形的模拟。

    以下是效果图:

    • 已标记为答案 MyCMy 2014年6月30日 1:33
    2014年6月28日 9:04
    版主
  • 谢谢大侠们的帮助!
    2014年6月30日 1:34
  • 你好,我这里还有一些办法可以画扇形。

    具体可以这么做,首先在Blend里面画如下图形,一个圆和一个长方形,同时选中他们之后合并->相减,就可以出一个半圆:

    选择合并->相减,得到一个半圆。之后重复同样的动作,之后仅仅把长方形做一个旋转,再进行相减,就可以得到你想要的扇形。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    • 已标记为答案 MyCMy 2014年7月1日 5:39
    2014年6月30日 2:18
    版主
  • 这样可以得出一个用XAML Path来表示的扇形:

    	<Path Data="M100,0 C136.243,-1E-05 167.984,19.2815 185.523,48.1463 L186.592,50.0061 L100,100 L0,100 C3E-06,44.7715 44.7715,-1.1E-05 100,0 z" Fill="#FFF4F4F5" Margin="583,284,596.408,384" Stretch="Fill" UseLayoutRounding="False"/>  

    效果如下:

    当然你可以后台加载这个图形,通过XamlReader class 这个类可以帮助加载XAML。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2014年6月30日 2:21
    版主