【问题标题】:Drawing things on a Canvas在画布上画东西
【发布时间】:2011-08-25 22:02:52
【问题描述】:

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

好的,让我说得更清楚一点。

假设用户在画布上的 386,43 处向下轻敲手指。 (画布是 768 x 480)

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

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

如果这个问题太复杂而无法用一个问题来回答(可能是这样),给我指向其他网站的链接,其中包含 Canvas 和 Drawing 文章。 p>

【问题讨论】:

  • 我想开始对每个包含明确要求在答案中包含代码的问题投反对票。如果我可以在不显示代码的情况下帮助您,您是否不需要我的帮助?
  • 我同意,这有点粗鲁。我愿意在这里给出怀疑的好处,因为它是一段非常简单的代码。
  • 如果你对C#一无所知,你就不应该在其中编码。严厉但真实。去学习 C#,然后你就不需要只用代码来问答案了。
  • @Martinho:嗯,从使用 Java 的经验来看,只是开始编写代码确实帮助我学习。另外,我的意思是我没有使用 C# Canvas 的经验。我确实有一些使用 C# 的经验。
  • 无论如何,对不起我的代码请求 - 正如你所看到的,我已经编辑了它。需要明确的是,只要有任何帮助,我都会没事的。 {我刚刚再次注意到这个问题,现在它刚刚为我赢得了一个值得注意的问题徽章,并想清理它。}

标签: c# visual-studio-2010 windows-phone-7 canvas drawing


【解决方案1】:

有多种方法可以做到这一点。根据红点的性质,您可以将其设为 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);
}

【讨论】:

  • 嗨,如果我希望每个点都是可点击的和一个用户控件怎么办?假设我有 1000 个点,用户 单击 一些点以将某些功能应用于它们
  • @FirstStep - 嗨。可能值得创建一个新问题(或查看它是否已在其他地方得到回答),但您可以将MouseDown 事件附加到上面的el 对象。在事件处理程序中,将sender 转换为Ellipse,您将拥有被点击的实例。希望这就是你的意思?
【解决方案2】:

我认为您需要以不同的方式解决问题。 (因此,我不是故意包含代码)。

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

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

【讨论】:

  • 如果 Windows Phone 以后支持屏幕截图,它可能是一个解决方案——但这种能力可能会在我发布我的应用程序之后出现。另外,我同意你的看法,也许使用画布不是正确的解决方案。
  • 嗨,Peter,您的意思是像简单地在 gui 上使用 Image 控件并在每个用户单击时绘制一个带有新更改的新位图图像吗? bmp 图像在哪里绑定到 Image Control?
猜你喜欢
  • 2020-12-19
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多