在InkCanvas之间移动笔画,背景颜色仅改变笔画? (WPF)

时间:2017-02-07 05:04:11

标签: wpf xaml mvvm inkcanvas

假设我有三层(从下到上),

  1. InkCanvas(最低z级别),
  2. InkCanvas(用于写作),
  3. InkCanvas(最高z级,顶部,用于绘图)。
  4. 在MVVM(WPF)中,如何将最高z级别的笔划捕获移动到最低级别的z级别? (移动时,笔划的边界矩形将用黄色填充。也就是说,的背景颜色包围笔划的区域将显示为黄色 - InkCanvas的其余部分是保持透明。)此外,我希望将笔划保持在目标InkCanvas中的相同坐标处。

    TIA

1 个答案:

答案 0 :(得分: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);
}