我正在为一款热门游戏制作散热工具,而且我试图将这些东西画到画布上。
简而言之:
我有一个列表点(坐标,颜色),我打算在画布上绘制。它们是一系列无关紧要的东西的结果,但最后我必须将点列表传递给DrawPoints()
方法,以便将它们可视化。
然而,在这样做时,我看不到任何被绘制的东西(包括SetMapImage())。它确实与我在方法本身中随机创建的虚拟点一起工作,但前提是我从public MainWindow()
方法调用它。
试图从另一个类的方法中调用它......
MainWindow mainWindow = new MainWindow();
mainWindow.DrawPoints(listOfPointsToDraw);
......不会产生结果。 (假设方法正确连接)
我开始使用WPF毫无准备地制作我的工具,它确实回来困扰我。我不知道是什么导致了这种行为,可能是因为我不了解一些基本的东西,但我甚至不知道从哪里开始阅读。任何意见都值得赞赏,但请记住,我对这个主题不太熟悉。
相关方法如下所示。
public MainWindow()
{
InitializeComponent();
DrawPoints(); // Calling this from here draws the background image and the dummy points
// Calling it from elsewhere draws nothing
}
...
public void DrawPoints()
{
SetMapImage();
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
Random rand = new Random();
for (int i = 0; i < 200; i++)
dc.DrawRectangle(Brushes.Red, null, new Rect(rand.NextDouble() * 4500, rand.NextDouble() * 4500, 10, 10));
for (int i = 0; i < 20; i++)
{
dc.DrawRectangle(Brushes.Red, null, new Rect(100 * i , 100 * i, 100, 100));
}
}
RenderTargetBitmap rtb = new RenderTargetBitmap(4500, 4500, 96, 96, PixelFormats.Pbgra32);
rtb.Render(dv);
Image img = new Image();
img.Source = rtb;
img.IsHitTestVisible = false;
drawCanvas.Children.Add(img);
}
设置背景。
private void SetMapImage()
{
ImageBrush ib = new ImageBrush();
ib.ImageSource = new BitmapImage(new Uri(@"C:\Local Projects\CSGO Gamejam\MirageMinimapWhite.png", UriKind.Relative));
drawCanvas.Background = ib;
}
答案 0 :(得分:0)
显然,除非你实际显示新窗口,否则创建一个新的MainWindow实例并在该新实例上调用该方法无效。
虽然您的问题不是很清楚,但您可能希望在已存在(并显示)的MainWindow实例上调用该方法。
因此,您应该替换
MainWindow mainWindow = new MainWindow();
mainWindow.DrawPoints(listOfPointsToDraw);
通过
MainWindow mainWindow = (MainWindow)Application.Current.MainWindow;
mainWindow.DrawPoints(listOfPointsToDraw);