2017-02-07 48 views
0

可以说我有三个层次(从底部到顶部),在InkCanvas之间移动笔画与只有笔画的背景颜色变化? (WPF)

  1. InkCanvas(最低ž水平),
  2. InkCanvas(用于书写),
  3. InkCanvas(最高的Z级别,顶部,用于绘图)。

在MVVM(WPF)中,如何捕获最高z级别的笔划被移动到最低级别的z级别? (移动时,笔划的边界矩形将填充黄色,即只包含的背景颜色包围笔划的区域应为黄色 - 其余的InkCanvas将保留透明)。另外,我希望在目标InkCanvas中保留相同坐标处的笔划。

TIA

+1

也许你可以包括MCVE这里您将招InkCanvas(1)未经黄色矩形,以便其他人可以专注于自己的主问题? – grek40

+0

@ grek40对不起...什么是MCVE? –

+0

http://stackoverflow.com/help/mcve对不起,我假设你知道短。 – grek40

回答

1

如果我理解正确的话,你可以简单地添加了黄色矩形额外的底层和在创建从顶层到其他层尽快将您的行程。

XAML:背后

<Grid> 
    <Canvas x:Name="canvas"/> 
    <InkPresenter x:Name="inkPresenter"/> 
    <InkCanvas x:Name="inkCanvas" StrokeCollected="InkCanvas_StrokeCollected" Background="Transparent"/> 
</Grid> 

代码:

void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e) { 
    var stroke = e.Stroke; 
    inkCanvas.Strokes.Remove(stroke); 
    inkPresenter.Strokes.Add(stroke); 
    var bounds = stroke.GetBounds(); 
    var yellowRect = new Rectangle { Width = bounds.Width, Height = bounds.Height, Fill = Brushes.Yellow }; 
    Canvas.SetLeft(yellowRect, bounds.X); 
    Canvas.SetTop(yellowRect, bounds.Y); 
    canvas.Children.Add(yellowRect); 
} 
+0

我相信你的建议可行,但WPF不能访问InkPresenter--你需要在通用应用程序中才能访问InkPresenter。不过,我确实看到了我可以在WPF中更改这一点。谢谢。 –

+0

实际上,WPF确实可以让您访问InkPresenter,如果您将上述代码放在新的WPF 4项目中,则无需进一步修改即可使用。 InkPresenters对绘制在别处创建的笔触非常有用。我使用它们来绘制我的(WPF)应用程序中的草图缩略图。 – wilford