如何允许用户从Xamarin.Forms标签复制和粘贴

时间:2014-12-19 16:55:10

标签: xamarin xamarin.forms

如何允许用户从Xamarin.Forms标签中复制和粘贴?

单击任何平台上的文本,默认设置不允许突出显示,因此复制和粘贴。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:8)

您可以做的是将标签包裹在手势识别器中:

<Label Text="Test">
    <Label.GestureRecognizers>
        <TapGestureRecognizer
            Tapped="YourFunctionToHandleMadTaps" 
            NumberOfTapsRequired="1" 
        />
   </Label.GestureRecognizers>
</Label>

这将触发您的功能,在该功能中,您可以进入剪贴板并进行复制和粘贴。但是,我无法找到一种简单的方法来访问Xamarin.Forms中的剪贴板,因此您必须使用依赖服务。

Xamarin.Forms Dependency service documentation

以下是我如何进行剪贴板数据访问。请注意,在我的项目中,我只需要从剪贴板中获取数据,因此此代码只显示如何访问剪贴板数据:

  1. 在X.F项目中创建一个界面,例如:

        public interface IClipBoard
        {
            String GetTextFromClipBoard();
        }
    
  2. 在移动项目中实施界面:

    Android:
        public string GetTextFromClipBoard ()
        {
            var clipboardmanager = (ClipboardManager)Forms.Context.GetSystemService (Context.ClipboardService);
            var item = clipboardmanager.PrimaryClip.GetItemAt(0);
            var text = item.Text;
            return text;
        }
    
    iOs:
        public string GetTextFromClipBoard ()
        {
            var pb = UIPasteboard.General.GetValue ("public.utf8-plain-text");
            return pb.ToString ();
        }
    
  3. 不要忘记在顶部添加汇编位:

        iOs: [assembly: Dependency (typeof (ClipBoard_iOs))]
        Android: [assembly: Dependency (typeof (ClipBoard_Droid))]
    
    1. 从您的X.F函数

      调用依赖服务
          public void YourFunctionToHandleMadTaps(Object sender, EventArgs ea)
          {
              var clipboardText = DependencyService.Get<IClipBoard> ().GetTextFromClipBoard ();
      
              YourFunctionToHandleMadTaps.Text = clipboardText;
          }
      

答案 1 :(得分:2)

由于I_Khanage只提供了一半的解决方案,我将发布完整的解决方案。

应该为所有定位平台实施

IClipboardService,在我的情况下,它是AndroidiOS

public interface IClipboardService
{
    string GetTextFromClipboard();
    void SendTextToClipboard(string text);
}

// iOS
public class ClipboardService : IClipboardService
{
    public string GetTextFromClipboard() => UIPasteboard.General.String;
    public void SendTextToClipboard(string text) => UIPasteboard.General.String = text;
}

// Android
public class ClipboardService : IClipboardService
{
    public string GetTextFromClipboard()
    {
        var clipboardmanager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);
        var item = clipboardmanager.PrimaryClip.GetItemAt(0);
        var text = item.Text;
        return text;
    }

    public void SendTextToClipboard(string text)
    {
        // Get the Clipboard Manager
        var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService);

        // Create a new Clip
        var clip = ClipData.NewPlainText("YOUR_TITLE_HERE", text);

        // Copy the text
        clipboardManager.PrimaryClip = clip;
    }
}

该代码可在github上找到。

现在只需添加GestureRecognizer即可触发点击事件。

P.S。:剪贴板服务现已作为Xamarin.Essentials包的一部分提供,因此无需自己编写