使用WPF在C#中绘制形状

使用WPF在C#中绘制形状,c#,wpf,C#,Wpf,我正试图用C#画一系列正方形。这是我第一次进入WPF。MySpaceProbeView类有一个SetModel函数,允许用户在将要渲染的方块上传递数据 一旦设置了模型,SpaceProbeView将迭代作为模型的2D数组。每个单元格都有关于其空间类型的数据,SpaceProbeView根据空间类型设置要绘制的正方形的颜色 使用我现在的代码,它只是在相同的位置绘制正方形,我一直在查看文档,不知道如何调整每个矩形的位置 这是我的SpaceProbeView: using System; using

我正试图用C#画一系列正方形。这是我第一次进入WPF。My
SpaceProbeView
类有一个
SetModel
函数,允许用户在将要渲染的方块上传递数据

一旦设置了
模型
SpaceProbeView
将迭代作为模型的2D数组。每个单元格都有关于其空间类型的数据,
SpaceProbeView
根据空间类型设置要绘制的正方形的颜色

使用我现在的代码,它只是在相同的位置绘制正方形,我一直在查看文档,不知道如何调整每个
矩形的位置

这是我的
SpaceProbeView

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;

namespace SpaceProbe
{
    public class SpaceProbeView
    {
        Window window = new Window();
        Canvas canvas = new Canvas();
        private int cellSize = 25;
        SpaceProbeModel model;
        int rowAndColumnSize;
        SolidColorBrush emptySpaceBrush = new SolidColorBrush();
        SolidColorBrush asteroidBrush = new SolidColorBrush();
        SolidColorBrush gravityWellBrush = new SolidColorBrush();
        SolidColorBrush gravityInfluencedBrush = new SolidColorBrush();
        Brush outlineBrush = System.Windows.Media.Brushes.Black;

        public SpaceProbeView(int size)
        {
            emptySpaceBrush.Color = Colors.Blue;
            asteroidBrush.Color = Colors.Brown;
            gravityWellBrush.Color = Colors.LightGray;
            gravityInfluencedBrush.Color = Colors.Gray;

            rowAndColumnSize = size;
            window.Title = "Space Probe";
            canvas.Width = rowAndColumnSize * cellSize;
            canvas.Height = rowAndColumnSize * cellSize;
            window.Width = rowAndColumnSize * cellSize;
            window.Height = rowAndColumnSize * cellSize;
            window.Content = canvas;

            window.Show();
        }

        public void SetModel(SpaceProbeModel aModel)
        {
            model = aModel;
            for (int row = 0; row < rowAndColumnSize; row++)
            {
                for (int column = 0; column < rowAndColumnSize; column++)
                {
                    Rectangle rect = new Rectangle();
                    rect.Width = cellSize;
                    rect.Height = cellSize;
                    rect.Stroke = outlineBrush;
                    rect.RenderTransform = new Point(row * cellSize, column * cellSize);

                    switch (model.cellType[row, column])
                    {
                        case SpaceProbeModel.type.asteroid:
                            rect.Fill = asteroidBrush;
                            break;
                        case SpaceProbeModel.type.gravityInfluenced:
                            rect.Fill = gravityInfluencedBrush;
                            break;
                        case SpaceProbeModel.type.gravityWell:
                            rect.Fill = gravityWellBrush;
                            break;
                        case SpaceProbeModel.type.empty:
                            rect.Fill = emptySpaceBrush;
                            break;
                    }
                    canvas.Children.Add(rect);
                }
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Media;
使用System.Windows.Shapes;
命名空间空间探测器
{
公共类SpaceProbeView
{
窗口=新窗口();
画布=新画布();
私人int cellSize=25;
SpaceProbeModel模型;
int行和列大小;
SolidColorBrush emptySpaceBrush=新的SolidColorBrush();
SolidColorBrush=新的SolidColorBrush();
SolidColorBrush gravityWellBrush=新的SolidColorBrush();
SolidColorBrush GravityInfectedBrush=新的SolidColorBrush();
笔刷outlineBrush=System.Windows.Media.Brush.Black;
公共空间ProbeView(整数大小)
{
emptySpaceBrush.Color=Colors.Blue;
颜色=颜色。棕色;
gravityWellBrush.Color=Colors.LightGray;
重力影响画笔。颜色=颜色。灰色;
rowAndColumnSize=大小;
window.Title=“空间探测器”;
canvas.Width=行和列大小*单元格大小;
canvas.Height=行和列大小*单元格大小;
window.Width=行和列大小*单元格大小;
window.Height=行和列大小*单元格大小;
window.Content=canvas;
window.Show();
}
public void SetModel(SpaceProbeModel aModel)
{
模型=模型;
对于(int row=0;row
删除所有这些内容并使用适当的XAML。@HighCore认真吗?是这样做的吗?我对WPF一无所知。认真地开始阅读并查看我的示例,了解如何使用WPF最佳实践(如数据绑定、ItemsControl和DataTemplates)创建图表/形状基于项的UI。@HighCore OK cool。