如何在单独的线程上在Windows 10 Universal App中绘制自定义圈?

时间:2017-01-30 01:19:10

标签: c# drawing windows-10-universal

我创建了一个新的通用应用项目(VS 2015),并希望通过单独的线程在页面上随机绘制一个圆圈。请看下面的简单代码 - 实际绘制圆圈需要添加什么?

谢谢!

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml.Shapes;
using System.Threading.Tasks;

namespace CircleDraw    {
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            this.Loaded += MainPage_Loaded;
        }
        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            Task.Factory.StartNew(() => DrawNewCircleEverySecondAsync(), TaskCreationOptions.LongRunning);
        }
        private static Random r = new Random(DateTime.UtcNow.Millisecond);
        private const int minRadius = 25;
        private const int maxRadius = 100;
        private async Task DrawNewCircleEverySecondAsync()
        {
            double height = grid1.ActualHeight;
            double width = grid1.ActualWidth;
            while (true)
            {
                int x = r.Next((int)width);
                int y = r.Next((int)height);
                int radius = r.Next(minRadius, maxRadius);

                // How do I draw this new circle here?

                await Task.Delay(1000);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果你只想在屏幕上画一个圆圈,试试这个:

        var Ellipse1 = new Ellipse();

        Ellipse1.Fill = new SolidColorBrush(Windows.UI.Colors.Transparent);
        Ellipse1.Stroke = new SolidColorBrush(Windows.UI.Colors.DarkGreen);
        Ellipse1.Width = radius * 2; //Diameter is twice the radius
        Ellipse1.Height = radius * 2;
        Ellipse1.SetValue(Canvas.LeftProperty, System.Convert.ToDouble(x)); //X value
        Ellipse1.SetValue(Canvas.TopProperty, System.Convert.ToDouble(y)); //Y value

        layoutRoot.Children.Add(Ellipse1); //Add the circle to the page. Could also use a canvas in place of layoutRoot.

这需要:

使用Windows.UI.Xaml.Shapes;

我还没有尝试过异步,但我不知道它为什么不起作用。

有关在Windows Universal中绘制形状的详细信息,请参阅: https://docs.microsoft.com/en-us/windows/uwp/graphics/drawing-shapes