拖拽将标签文本拖放到UWP中的TextBlock中

时间:2017-07-12 09:35:43

标签: drag-and-drop uwp windows-10-universal

我在textblock中有一些内容。我需要从标签拖放文本以填充语句。这就像使用拖放来填充一些字符串的空白。 (例如:目标文本块包含&#34; UWP是__平台 - 同构应用程序架构创建__ Microsoft __首先介绍__ Windows 10&#34;并且在gridview中我有单独的标签为&#34; a < /强>&#34;&#34;在的;,&#34; &#34;&#34 &#34 &#34;。我需要拖动单词并放入空白区域以完成以下语句&#34; UWP是由Microsoft创建的平台同构应用程序体系结构,最初是在Windows 10&#34;中引入的。我正在尝试使用C#在UWP中实现。请帮助我这样做。 Click here to view the sample

1 个答案:

答案 0 :(得分:1)

我已根据DragAndDropSampleManaged UWP官方代码示例达到了您的要求。根据您的要求,您希望在&#34;中插入&#34; a&#34;,&#34;&#34;,&#34;和&#34;,&#34;等文本。通过drag and drop进入已存在的句子。所以你应该得到你想插入的范围。您可以使用GetRangeFromPoint(RichEditBox)方法获取指针悬停的范围,如下所示:

private void TargetTextBox_DragOver(object sender, DragEventArgs e)
{
    var point = e.GetPosition(TargetTextBox);
    var range = TargetTextBox.Document.GetRangeFromPoint(point, Windows.UI.Text.PointOptions.ClientCoordinates);
    TargetTextBox.Document.Selection.SetRange(range.StartPosition - 1, range.EndPosition);       
    TargetTextBox.Focus(FocusState.Keyboard);
}

enter image description here 当释放点时,文本将被插入特定范围。

private async void TargetTextBox_Drop(object sender, Windows.UI.Xaml.DragEventArgs e)
{
     VisualStateManager.GoToState(this, "Outside", true);
     bool hasText = e.DataView.Contains(StandardDataFormats.Text);
     // if the result of the drop is not too important (and a text copy should have no impact on source)
     // we don't need to take the deferral and this will complete the operation faster
     e.AcceptedOperation = hasText ? DataPackageOperation.Copy : DataPackageOperation.None;
     if (hasText)
     {
         var text = await e.DataView.GetTextAsync();           
         TargetTextBox.Document.Selection.Text = text;
     }
}

enter image description here