2017-02-07 10 views
0

Допустит, у меня есть три слоя (снизу вверх),Перемещение штрихов между InkCanvas с изменением цвета фона только штрихов? (WPF)

  1. InkCanvas (самый низкий уровень Z)
  2. InkCanvas (используемый для записи),
  3. InkCanvas (самый высокий г уровень, сверху, используется для рисования).

В MVVM (WPF), как можно перенести удары с самого высокого уровня z на нижний уровень уровня z? (При перемещении ограничивающий прямоугольник штрихов должен быть заполнен желтым цветом. То есть цвет фона только область, охватывающая штрихи, должна быть окрашена в желтый цвет - остальная часть InkCanvas должна оставаться прозрачный.) Кроме того, я хочу сохранить штрихи в тех же координатах в целевом InkCanvas.

ТИА

+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