在画布上绘制图形

11

我如何在Windows Phone上用C#在画布上绘制东西?

好的,让我再明确一点。

假设用户在画布上的386,43处轻触屏幕。(画布大小为768x480)

我希望我的应用程序能够响应并在画布上的386,43处放置一个红点。

我之前没有使用过Canvas的经验。

如果这太复杂而无法用一个问题回答(很可能是这样),给我提供其他有关Canvas和绘图文章的网站链接。


7
我觉得要开始给那些明确请求回答中包含代码的问题投反对票了。如果我可以帮助你而不必展示代码,你就不想要我的帮助吗? - R. Martinho Fernandes
1
我同意,这有点粗鲁。由于这只是一个非常简单的代码片段,我愿意给予怀疑的余地。 - keyboardP
1
如果你对C#一无所知,那么你不应该在其中编码。虽然很严厉,但这是事实。去学习C#,然后你就不需要只寻求代码答案了。 - R. Martinho Fernandes
2
@Martinho:从我使用Java的经验来看,直接跳进去写代码确实有助于我学习。另外,我是指我没有使用过C# Canvas的经验。但我确实有一些C#的经验。 - JavaAndCSharp
无论如何,很抱歉我之前请求代码的事情 - 正如您所看到的,我已经将其编辑掉了。明确一下,我会接受几乎任何帮助。{我刚刚注意到这个问题,因为它让我赢得了一个值得关注的问题徽章,并想要整理一下它。} - JavaAndCSharp
你好,你最终使用Canvas了吗?我想画1000个点,用户需要能够选择一些点并对这些选定的点应用函数。在你的经验之后,你会推荐更好的方法吗? - Khalil Khalaf
2个回答

9

有多种方法可以实现这一点。根据红点的性质,您可以将其制作成一个UserControl。对于基本圆形,您可以简单地处理canvas的ManipulationStarted事件。

private void myCanvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{

            Ellipse el = new Ellipse();
            el.Width = 10;
            el.Height = 10;
            el.Fill = new SolidColorBrush(Colors.Red);
            Canvas.SetLeft(el, e.ManipulationOrigin.X);
            Canvas.SetTop(el, e.ManipulationOrigin.Y);
            myCanvas.Children.Add(el);
}

嗨,如果我想让每个点都可以被点击并且是一个用户控件怎么办?假设我有1000个点,用户通过点击某些点来对它们应用一些功能。 - Khalil Khalaf
1
@FirstStep - 嗨。也许值得创建一个新问题(或看看是否已经在其他地方回答),但您可以将MouseDown事件附加到上面的el对象。在事件处理程序中,将sender转换为Ellipse,然后你就会有被点击的实例。希望这就是你想要的? - keyboardP

4

我认为你需要以不同的方式解决这个问题(故意不包含代码)。

在Windows应用程序(包括Phone)中,表单和控件可能因多种原因随时刷新。如果你响应触摸操作在画布上绘制,你会得到一个更新后的画布,直到下一次刷新。如果发生了刷新,画布会重新绘制自己,你会得到一个空白的画布。

我不知道你的最终目标是什么,但你可能想要跟踪用户所做的事情,并将该状态存储在某个地方,并在画布重新绘制时在画布上显示它。这可以通过存储所有操作并在画布上“重放”它们来完成,或者仅将画布的视图作为位图存储,并在刷新时重新加载画布。但是,在后一种情况下,我认为使用画布不是正确的解决方案。


如果Windows Phone在未来支持截屏功能,这可能是一种解决方案——但这种能力可能会在我发布我的应用程序之后推出。另外,我同意你的看法,也许使用画布不是正确的解决方案。 - JavaAndCSharp
嗨Peter,你的意思是在GUI上简单地使用一个图像控件,在每次用户点击事件时绘制一个新的位图图像,其中bmp图像绑定到图像控件? - Khalil Khalaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接