C# 用C语言显示窗口#
我正在尝试为我用C#编写的一个小玩具程序创建一个WPF UI。程序只找到两点之间的最短路径。该显示将创建一个正方形网格,用于显示单元格的类型(空白空间、小行星、重力井、重力影响、起点、终点和路径) 运行我创建的UI的最佳方式是什么?我刚刚将UI中的C# 用C语言显示窗口#,c#,wpf,C#,Wpf,我正在尝试为我用C#编写的一个小玩具程序创建一个WPF UI。程序只找到两点之间的最短路径。该显示将创建一个正方形网格,用于显示单元格的类型(空白空间、小行星、重力井、重力影响、起点、终点和路径) 运行我创建的UI的最佳方式是什么?我刚刚将UI中的窗口变量设置为公共变量,并在程序.cs类中创建了一个应用程序,并在窗口上调用了运行。我尝试过同时运行两个不同的窗口,但只有一个窗口会显示,我如何让这两个窗口都显示 另外,是否有一种方法可以使我的网格在描述每个单元格的数组内容发生变化时更新?e、 g.如
窗口
变量设置为公共变量,并在程序.cs
类中创建了一个应用程序
,并在窗口
上调用了运行
。我尝试过同时运行两个不同的窗口,但只有一个窗口会显示,我如何让这两个窗口都显示
另外,是否有一种方法可以使我的网格在描述每个单元格的数组内容发生变化时更新?e、 g.如果一个单元格从小行星变为具有不同颜色的空白,有没有办法让我的UI知道它发生了变化并相应地更新
以下是UI的源代码:
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
{
public Window window = new Window();
public Window optionWindow = new Window();
Canvas canvas = new Canvas();
private int cellSize = 25;
SpaceProbeModel model;
int rowAndColumnSize;
SolidColorBrush emptySpaceBrush = Brushes.DarkBlue;
SolidColorBrush asteroidBrush = Brushes.DarkGreen;
SolidColorBrush gravityWellBrush = Brushes.Magenta;
SolidColorBrush gravityInfluencedBrush = Brushes.DarkMagenta;
SolidColorBrush pathBrush = Brushes.DarkTurquoise;
SolidColorBrush startBrush = Brushes.Black;
SolidColorBrush finishBrush = Brushes.DarkOrange;
Brush outlineBrush = Brushes.Black;
public SpaceProbeView(int size)
{
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.SizeToContent = SizeToContent.WidthAndHeight;
//window.Show();
optionWindow.Width = 100;
optionWindow.Height = 200;
//optionWindow.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;
switch (model.cellType[row, column])
{
case SpaceProbeModel.type.start:
rect.Fill = startBrush;
break;
case SpaceProbeModel.type.finish:
rect.Fill = finishBrush;
break;
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;
case SpaceProbeModel.type.path:
rect.Fill = pathBrush;
break;
}
Canvas.SetTop(rect, row * cellSize);
Canvas.SetLeft(rect, column * cellSize);
canvas.Children.Add(rect);
}
}
}
}
}
再一次,删除所有内容并使用适当的XAML。@HighCore lol我想知道你是否会再次出现。我可以告诉你,XAML只是用于总体UI布局和设计逻辑的代码,这似乎就是我正在做的-逻辑,对吗?我遗漏了什么?您所做的不是“设计逻辑”,而是从数据模型中获取数据并手动将其放入UI,而不是使用数据绑定。这里您需要的是一个
ItemsControl
,带有UniformGrid
,类似于。您可能还应该通读MSDN上的页面。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace SpaceProbe
{
class Program
{
[STAThread]
static void Main(string[] args)
{
SpaceProbeView view = new SpaceProbeView(30);
SpaceProbeModel model = new SpaceProbeModel(30, 20, 1);
model.Start = new SpaceProbeModel.CellPair(5, 5);
model.FindShortestPath(20, 25);
view.SetModel(model);
Application app = new Application();
app.Run(view.window);
}
}
}