0

Я знаю, как установить свойства, такие как CanDrag и AllowDrop, и определить метод DragOver и метод Drop. Я просто не знаю, что писать внутри метода Drop.Как перенести текст из одного текстового блока в другой текстовый блок с помощью перетаскивания в универсальном приложении Windows?

+0

Почему downvote? –

ответ

1

Как переместить текст из одного TextBlock к другому TextBlock с помощью перетаскивания

Мы можем определить DragStarting событие для источника Textblock и сохранить текст источника Textblock в DragStartingEventArgs для передачи во время перетаскивания. И принять текст, когда drop у цели Textblock. Прочтите текст от DragEventHandler и установите его на цель Textblock.

Здесь я написал простой пример, переместите текст с txtsource, чтобы добавить к txttarget.

код XAML:

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Padding="30"> 
    <Border BorderBrush="Azure" BorderThickness="2"> 
     <TextBlock x:Name="txtsource" Text="I'm the first textblock" CanDrag="True" DragStarting="txtsource_DragStarting" /> 
    </Border> 
    <Border BorderBrush="Azure" BorderThickness="2" Margin="20" AllowDrop="True" > 
     <TextBlock x:Name="txttarget" Text="I'm the second textblock" Drop="txttarget_Drop" Height="50" Width="400" AllowDrop="True" DragEnter="txttarget_DragEnter"/> 
    </Border> 
</StackPanel> 

код за

private void txtsource_DragStarting(UIElement sender, DragStartingEventArgs args) 
    { 
     args.Data.SetText(txtsource.Text); 
    } 

    private async void txttarget_Drop(object sender, DragEventArgs e) 
    { 
     bool hasText = e.DataView.Contains(StandardDataFormats.Text); 
     e.AcceptedOperation = hasText ? DataPackageOperation.Copy : DataPackageOperation.None; 
     if (hasText) 
     { 
      var text = await e.DataView.GetTextAsync(); 
      txttarget.Text +="\n"+ text; 
     } 
    } 
    private void txttarget_DragEnter(object sender, DragEventArgs e) 
    { 
     bool hasText = e.DataView.Contains(StandardDataFormats.Text); 
     e.AcceptedOperation = hasText ? DataPackageOperation.Copy : DataPackageOperation.None; 
     if (hasText) 
     { 
      e.DragUIOverride.Caption = "Drop here to insert text"; 
     } 
    } 

DragOver Я использую событие, чтобы помочь определить, какие области могут упасть. Более подробно обратитесь к сценарию 2 из official sample.