wpf - 在WPF中更新Shapes值的最佳方法

标签 wpf mvvm canvas architecture

我在这里有很大的问题。我在绘图应用程序(Caliburn.Micro)中使用了MVVM,但找不到一种合理的方法来使它通过实时预览来绘制形状。

绘图 Canvas 包括一个获取输入并将数据馈送到模型的 Canvas ,以及一个包含许多 Canvas 的网格,每层一个。该模型触发事件(我将使用Line作为示例):

  • 创建线的事件-它创建一个简单的Line对象,该对象具有起点,终点,颜色,厚度和自动生成的ID的属性。该事件具有线及其添加到的图层。
  • 鼠标移动时,将更新在1.中创建的线对象的端点,并使用更新后的形状及其图层作为参数触发新事件。
  • 将鼠标移到上面2.也会发生。

  • 现在,在注册这些事件的ViewModel中,我只需要添加等效的WPF形状(在本例中为System.Windows.Shapes.Line)来校正 Canvas ,并在添加形状时设置参数即可。但是我无法想到在移动鼠标以实时显示绘制的形状时更新形状参数的鲁棒性。

    我尝试使用依赖项属性,但是它没有用,而且似乎有点过大(因为所有这些 Canvas 中都包含许多形状)。我也尝试过扩展Line,但是不可能,因为该类是密封的。我还需要与绘制的形状进行交互(例如,调整大小,旋转)。

    最佳答案

    我将研究writeablebitmap和WriteableBitmapEx扩展。这将具有相当好的性能,具体取决于您必须渲染多少个东西。如果您需要一次在屏幕上显示1000多个内容,则可能需要考虑将DirectX与SlimDx或SharpDx这样的包装一起使用。

    关于wpf - 在WPF中更新Shapes值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250735/

    相关文章:

    wpf - 将 catel 与 3rd 方控件一起使用

    javascript - 保存带有背景图像的 Canvas

    c# - 如何获取特定 WPF 窗口的当前 SynchronizationContext?

    没有 XAML 的 WPF

    wpf - 在复杂、解耦的 WPF 应用程序上使用 Expression Blend 的策略是什么?

    xaml - 第一次未单击按钮单击[仅适用于Windows 8.1/10平板电脑]

    javascript - 使用 fabric.js 修改 Canvas 而不删除现有内容

    javascript - 如果支持 Canvas ,如何使用 JavaScript 验证?

    c# - 获取 WPF 路径的长度

    wpf - ViewModel 处理事件