UWP - Как изменить размер перетаскиваемого изображения во время перетаскивания? - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь перетащить элемент пользовательского интерфейса, который существует в Viewbox.Как только начинается процесс перетаскивания, ожидаемое изображение отображается для операции перетаскивания, но изображение является полноразмерным, а не размером изображения, отображаемого в окне просмотра.

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

Я не вижу никаких параметров в DataPackage или DragUI DragStartingEventArgs, которыепозволит изменить размер перетаскиваемого изображения.

Перетаскиваемый элемент пользовательского интерфейса представляет собой RelativePanel с несколькими встроенными изображениями и фигурами внутри.

1 Ответ

0 голосов
/ 14 марта 2019

Хорошо, так что это немного глупо, но, похоже, работает хорошо. Можно сделать много доработок, но вот способ сделать это.

    private async void OnDragStarting(UIElement sender, DragStartingEventArgs args)
    {
        var relativePanel = (RelativePanel) sender;
        var ellipse = (Ellipse)relativePanel.Children.ToList()[0];

        var deferral = args.GetDeferral();

        var bitmap = new RenderTargetBitmap();
        await bitmap.RenderAsync(ellipse);

        // convert the ellipse to a pixel array
        var pixelBuffer = await bitmap.GetPixelsAsync();
        var pixelArray = pixelBuffer.ToArray();

        var stream = new InMemoryRandomAccessStream();

        var img = new BitmapImage();
        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
        encoder.SetPixelData(
            BitmapPixelFormat.Bgra8,
            BitmapAlphaMode.Straight,
            (uint)bitmap.PixelWidth,
            (uint)bitmap.PixelHeight,
            96,
            96,
            pixelArray);

        // now that there is an encoder set up, set the new size of the image
        encoder.BitmapTransform.ScaledHeight = 50;
        encoder.BitmapTransform.ScaledWidth = 50;

        await encoder.FlushAsync();
        await img.SetSourceAsync(stream);

        args.DragUI.SetContentFromBitmapImage(img);

        deferral.Complete();
    }
...