c# - 相当于绘图应用程序的橡皮擦、c#、silverlight、wp7

标签 c# silverlight windows-phone-7 line

我正在开发一个简单的绘图应用程序,以进一步提高我的技能,但我似乎无法理解橡皮擦工具的逻辑。该应用程序仅使用 Line 类在用户移动手指时创建线条。对于橡皮擦工具,我尝试使用 VisualTreeHelper,如下所示:

List<UIElement> elements = (List<UIElement>)VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(tree), ContentPanelCanvas);

            foreach (UIElement element in elements)
            {
                if (element is Line)
                {
                    this.ContentPanelCanvas.Children.Remove(element);
                }
            }

它在某些时候可能会非常缓慢且滞后。有时我必须触摸该区域超过 5 次才能去掉那里的线。

有替代方案吗?

最佳答案

e.GetPosition(tree)将返回一个点。尝试使用 Rect以位置为中心。

const double fingerMargin = 10.0;

Point p = e.GetPosition(tree);
Rect r = new Rect(p.X - fingerMargin, p.Y - fingerMargin, fingerMargin * 2, fingerMargin * 2); 

var elements = VisualTreeHelper.FindElementsInHostCoordinates(r, ContentPanelCanvas);

Line lineToRemove = elements.OfType<Line>().FirstOrDefault();
if (lineToRemove != null)
{
    ContentPanelCanvas.Children.Remove(lineToRemove);
}

请注意,不要将 FindElementsInHostCooperatives 的结果强制转换为 List<T> ,这是一个实现细节,文档仅保证它是 IEnumerable<UIElement> ,除此之外,这是一个不必要的强制转换。

关于c# - 相当于绘图应用程序的橡皮擦、c#、silverlight、wp7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6116294/

相关文章:

c# - 使用 System.Web.Optimization 捆绑,如何访问构建捆绑的结果?

c# - 如何在 .Net 4 中禁用显式垃圾收集?

c# - 打开Outlook后无法创建带有Outlook Interop的电子邮件

silverlight - 是否可以从网页启动Silverlight 4 OOB应用程序?

.net - 如何自动选择 WPF TextBox 中焦点上的所有文本?

silverlight - WP7应用程序的反馈表

html - 有没有办法使用条件注释来定位 Windows Mobile 7.5 浏览器?

c# - 尝试读取或写入 protected 内存。当我调用 openfileDialog 的 showDialog 方法时

c# - SilverLight 文件上传?

c# - 将字符串解析为公式的库,适用于 Windows Phone 7