Ответ 1
Что вы можете сделать, это обернуть свою метку в распознавателе жестов:
<Label Text="Test">
<Label.GestureRecognizers>
<TapGestureRecognizer
Tapped="YourFunctionToHandleMadTaps"
NumberOfTapsRequired="1"
/>
</Label.GestureRecognizers>
</Label>
Это вызовет вашу функцию и в этой функции вы сможете попасть в буфер обмена и скопировать и вставить. Однако я не смог найти простой способ доступа к буферу в Xamarin.Forms, поэтому вам нужно использовать службу зависимостей.
Документация по обслуживанию зависимостей Xamarin.Forms
Вот как я сделал доступ к данным в буфере обмена. Обратите внимание, что в моем проекте мне только нужно было записывать данные из буфера обмена, поэтому этот код просто показывает вам, как получить доступ к данным буфера обмена:
-
Создайте интерфейс в проекте 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; }