Перетащите на SwapChainPanel в приложении UWP - PullRequest
0 голосов
/ 08 января 2019

У нас есть приложение UWP, которое использует SwapChainPanel для рендеринга 2D-контента, мы хотели бы иметь возможность перетаскивать на него файлы.

Первый подход:

Сначала я просто попытался использовать события на самой панели SwapChainPanel, они никогда не вызывались.

        <SwapChainPanel x:Name="swap" AllowDrop="True" DragEnter="Swap_DragEnter" >

        </SwapChainPanel>

Второй подход:

Затем я попытался поместить прозрачный прямоугольник в SwapChainPanel. События перетаскивания теперь работают, но SwapChainPanel теперь вообще не получает событий указателя.

        <SwapChainPanel x:Name="swap" >
            <Rectangle Fill="Transparent" AllowDrop="True" DragEnter="Swap_DragEnter"  />
        </SwapChainPanel>

Третий подход:

Кажется, SwapChainPanel не работает как обычный элемент управления XAML, поэтому я предположил, что мне придется обрабатывать события перетаскивания в коде c ++, который запускает панель. Но, кажется, нет никакого способа сделать это, есть только ссылки на основные события указателя.

    ...
    coreInput_ = renderPanel_.CreateCoreIndependentInputSource(deviceTypes);

    coreInput_.PointerPressed({this, &InputManagerImpl::onPointerPressed});
    coreInput_.PointerMoved({this, &InputManagerImpl::onPointerMoved});
    coreInput_.PointerReleased({this, &InputManagerImpl::onPointerReleased});
    coreInput_.PointerEntered({this, &InputManagerImpl::onPointerEntered});
    coreInput_.PointerExited({this, &InputManagerImpl::onPointerExited});
    coreInput_.PointerCaptureLost({this, &InputManagerImpl::onPointerCaptureLost});
    coreInput_.PointerWheelChanged({this, &InputManagerImpl::onPointerWheelChanged});
    ...

Так что теперь я не уверен, как я могу выполнять операции перетаскивания? Спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Я думаю, вы могли бы поместить свой SwapChainPanel в Grid и поместить перетаскивание на сетку. Вы можете потерять взаимодействие со своей сценой рендера. И убедитесь, что, поскольку он прозрачен, он принимает пользовательский ввод.

Например:

<!-- add attributes and drag and drop functionality on Grid -->
<Grid AllowDrop="True" DragEnter="Swap_DragEnter"> 
     <SwapChainPanel x:Name="swap">

     </SwapChainPanel>
</Grid>
...