InkCanvas не фиксирует штрихи перед предварительным просмотром при использовании touch

#c# #wpf #touch #inkcanvas

#c# #wpf #коснитесь #inkcanvas

Вопрос:

Я использую объект InkCanvas с записью при рисовании. Как вы можете видеть на этом gif, созданный путем рисования с помощью мыши:

С помощью мыши

Когда пользователь запускает PreviewMouseDown событие, я просто запускаю захват, покадровую базу по времени.

Захват выполняется простым рендерингом:

 public static RenderTargetBitmap GetRender(this UIElement source, double dpi)
{
    var bounds = VisualTreeHelper.GetDescendantBounds(source);

    var scale = Math.Round(dpi / 96d, 2);
    var width = (bounds.Width   bounds.X) * scale;
    var height = (bounds.Height   bounds.Y) * scale;

    #region If no bounds

    if (bounds.IsEmpty)
    {
        var control = source as Control;

        if (control != null)
        {
            width = control.ActualWidth * scale;
            height = control.ActualHeight * scale;
        }

        bounds = new Rect(new System.Windows.Point(0d, 0d), new System.Windows.Point(width, height));
    }

    #endregion

    var rtb = new RenderTargetBitmap((int)Math.Round(width), (int)Math.Round(height), dpi, dpi, PixelFormats.Pbgra32);

    var dv = new DrawingVisual();
    using (var ctx = dv.RenderOpen())
    {
        var vb = new VisualBrush(source);

        var locationRect = new System.Windows.Point(bounds.X, bounds.Y);
        var sizeRect = new System.Windows.Size((int)Math.Round(bounds.Width), (int)Math.Round(bounds.Height));

        ctx.DrawRectangle(vb, null, new Rect(locationRect, sizeRect));
    }

    rtb.Render(dv);
    return (RenderTargetBitmap)rtb.GetAsFrozen();
}
  

Теперь проблема в том, что при использовании touch по какой-то причине штрихи недоступны при выполнении рендеринга. Но у меня они отображаются нормально:

С помощью touch

Как вы можете видеть, устройство записи по-прежнему фиксирует все необходимые кадры, но штрихи появляются только «там», когда происходит PreviewMouseUp событие.

Что я могу сделать, чтобы исправить эту проблему?

Комментарии:

1. Вы пытались обработать PreviewTouchDown событие?

2. Да, оба PreviewTouchDown и PreviewMouseDown работают должным образом. Проблема в том, что средство визуализации чернил не делает чернила доступными до запуска PreviewXXXXUp события.

3. Я полагаю, что это как-то связано с тем фактом, что существует средство распознавания жестов, возможно, оно не выпускает чернильный штрих, потому что сначала ему нужно распознать, является ли это жестом или нет? Я не уверен.