问题 在画布上绘制东西


我如何在C#for Windows Phone的Canvas上绘制一些东西?

好的,让我更清楚一点。

假设用户在画布上用386,43点击他的手指。 (画布是768乘480)

我希望我的应用程序能够通过在画布上放置一个红点386,43来做出响应。

我有 没有 以前使用Canvas的经验。

如果 这太复杂了,无法在一个问题中回答(可能是这个问题),  通过Canvas和Drawing文章给我链接到其他网站。


7125
2018-05-15 14:10


起源

我想开始关注每个问题,包括在答案中包含代码的明确请求。如果我可以在没有显示代码的情况下帮助您,您不需要我的帮助吗? - R. Martinho Fernandes
我同意,这有点粗鲁。我愿意在这里提出疑问,因为它是一段非常简单的代码。 - keyboardP
如果你不了解C#的事情,你就不应该编写它。苛刻但真实。去学习C#然后你不需要只用代码请求答案。 - R. Martinho Fernandes
@Martinho:嗯,从Java的经验来看,只是跳进去编写代码 不 帮我学习另外,我的意思是我没有使用C#Canvas的经验。我有 一些 有了C#的经验。 - JavaAndCSharp
无论如何,对不起我的代码请求 - 正如你所看到的,我已经编辑了它。要清楚,我几乎可以得到任何帮助。 {我刚刚再次注意到这个问题,现在它只是赢得了一个值得注意的问题徽章,并想要清理它。} - JavaAndCSharp


答案:


有很多方法可以做到这一点。根据红点的性质,您可以将其设置为UserControl。对于一个基本的圆圈,你可以简单地处理你的画布' 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);
}

8
2018-05-15 14:18



嗨,如果我希望每个点都可点击和UserControl怎么办?让我们说我的用户有1000分 点击 在一些点上应用一些功能 - Khalil Khalaf
@FirstStep - 嗨。可能值得创建一个新问题(或者看看它是否已在其他地方得到解答)但你可以附上 MouseDown 活动到了 el上面的对象。在事件处理程序中,强制转换 sender 至 Ellipse 并且你将拥有被点击的实例。希望那是你的意思? - keyboardP


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

Windows应用程序(包括Phone)中的表单和控件可以在任何时候出于多种原因进行刷新。如果您在画布上绘制以响应触摸操作,则在下次刷新之前会有一个更新的画布。如果刷新发生,画布重新绘制自己,则最终会得到一个空白画布。

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


4
2018-05-15 14:30



它 可能 如果Windows Phone将来会支持屏幕截图,那么这将成为一种解决方案 - 但是在我发布应用程序之后,这种功能可能会出现。另外,我同意你的意见,也许使用画布不是正确的解决方案。 - JavaAndCSharp
嗨彼得你的意思是,只需在gui上使用一个图像控件,并在每个用户点击evet绘制一个新的位图图像与新的变化? bmp图像绑定到图像控件的位置? - Khalil Khalaf