如何允许用户从Xamarin.Forms标签中复制和粘贴?
单击任何平台上的文本,默认设置不允许突出显示,因此复制和粘贴。
任何帮助都将不胜感激。
答案 0 :(得分:8)
您可以做的是将标签包裹在手势识别器中:
<Label Text="Test">
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="YourFunctionToHandleMadTaps"
NumberOfTapsRequired="1"
/>
</Label.GestureRecognizers>
</Label>
这将触发您的功能,在该功能中,您可以进入剪贴板并进行复制和粘贴。但是,我无法找到一种简单的方法来访问Xamarin.Forms中的剪贴板,因此您必须使用依赖服务。
Xamarin.Forms Dependency service documentation
以下是我如何进行剪贴板数据访问。请注意,在我的项目中,我只需要从剪贴板中获取数据,因此此代码只显示如何访问剪贴板数据:
在X.F项目中创建一个界面,例如:
public interface IClipBoard
{
String GetTextFromClipBoard();
}
在移动项目中实施界面:
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 ();
}
不要忘记在顶部添加汇编位:
iOs: [assembly: Dependency (typeof (ClipBoard_iOs))]
Android: [assembly: Dependency (typeof (ClipBoard_Droid))]
从您的X.F函数
调用依赖服务 public void YourFunctionToHandleMadTaps(Object sender, EventArgs ea)
{
var clipboardText = DependencyService.Get<IClipBoard> ().GetTextFromClipBoard ();
YourFunctionToHandleMadTaps.Text = clipboardText;
}
答案 1 :(得分:2)
由于I_Khanage只提供了一半的解决方案,我将发布完整的解决方案。
应该为所有定位平台实施 IClipboardService
,在我的情况下,它是Android
和iOS
:
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包的一部分提供,因此无需自己编写。