簡體   English   中英

如何使用通用Windows應用程序中的拖放功能將文本從一個Textblock移至另一個Textblock?

[英]How to move text from one Textblock to another Textblock using Drag and Drop in a Universal Windows Application?

我知道如何設置CanDrag和AllowDrop之類的屬性,以及定義DragOver方法和Drop方法。 我只是不知道在Drop方法中寫什么。

如何使用拖放功能將文本從一個Textblock移至另一個Textblock

我們可以定義DragStarting為源事件Textblock ,並保存源的文字TextblockDragStartingEventArgs拖動過程中轉移。 並在放置到目標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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM