Перетащите элемент пользовательского интерфейса в UWP

У меня есть сетка, которая включает в себя TextBox. Я хочу, чтобы пользователь мог перетащить TextBox в этой сетке. Я попытался свойство canDrag установить True, но ничего не делает.

<Grid AllowDrop="True">
    <TextBlock CanDrag="True"/>

</Grid>

2 ответа

Решение

Как я могу управлять манипуляциями с помощью клавиатуры? я не мог ограничить область. Я пробую холст, но он не может ограничить область.

на самом деле, мы могли бы использовать все для области, а не только холст. я делаю это в XAML

<Grid Width="300" Height="300">
        <TextBlock Text="mahdi" Name="t" ManipulationMode = "TranslateX, TranslateY, Scale"  

    ManipulationDelta = "t_ManipulationDelta" >

            <TextBlock.RenderTransform>
                <CompositeTransform x:Name="t_Transform" />
            </TextBlock.RenderTransform>
        </TextBlock>



</Grid>

и в C#

namespace Manipulation
{
    public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }




    private void t_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
    {
        this.t_Transform.TranslateX += e.Delta.Translation.X;
        this.t_Transform.TranslateY += e.Delta.Translation.Y;
    }


}

} Но я не мог ограничить область. Я пробую холст, но он не может ограничить область.

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

Дочерний элемент управления (в данном случае текстовый блок) не может свободно перемещаться внутри сетки. Вам нужно добавить элемент управления canvas. Элемент управления холста автоматически расширяется, чтобы заполнить его родительский элемент, поэтому он автоматически расширяется, чтобы заполнить сетку.

Вы, вероятно, ищете "Манипулирование", а не "Перетаскивание". Вам нужно будет справиться с ManipulationStarted, ManipulationDelta, а также ManipulationCompleted события для TextBLock:

<Grid>
    <Canvas>
        <TextBlock ManipulationStarted="TextBlock_ManipulationStarted"
                   ManipulationDelta="TextBlock_ManipulationDelta"
                   ManipulationCompleted="TextBlock_ManipulationCompleted"></TextBlock>
    </Canvas>
</Grid>

Посмотрите на пример "BasicInput", чтобы узнать, как работать с манипуляциями: https://github.com/Microsoft/Windows-universal-samples.

Другие вопросы по тегам