1

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

绘图画布由一个获取输入并将数据提供给模型的画布和一个包含许多画布的网格组成,每一层一个。模型触发事件(我将以 Line 为例):

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

现在在注册到这些事件的 ViewModel 中,我只需向正确的画布添加一个等效的 WPF 形状(在本例中为 System.Windows.Shapes.Line),并在添加形状时设置参数。但是我想不出任何可以在移动鼠标以显示绘制形状的实时预览时更新形状参数的想法。

我尝试使用依赖属性,但它没有用,而且似乎有点矫枉过正(因为所有这些画布中的形状数量)。我也尝试过扩展 Line,但这是不可能的,因为类是密封的。我还需要与绘制的形状进行交互(例如调整大小、旋转)。

4

2 回答 2

1

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

于 2013-03-06T15:20:14.670 回答
0

所以你基本上需要两行,一条看起来像以前一样,另一条看起来像用户“提交”他的更改时的样子?您可以拥有一个包含两种相同形状类型的容器类,并在用户处于编辑模式时移动第二种。当用户退出编辑模式时,您可以保留第一个(用户取消)或使第二个成为新的、唯一的第一个形状。

于 2013-03-06T15:08:24.670 回答