Как вы разрешаете пользователям копировать и вставлять их из метки Xamarin.Forms?
Нажмите на текст на любой платформе, настройки по умолчанию не позволяют выделять и, следовательно, копировать и вставлять.
Любая помощь будет оценена.
Как вы разрешаете пользователям копировать и вставлять их из метки Xamarin.Forms?
Нажмите на текст на любой платформе, настройки по умолчанию не позволяют выделять и, следовательно, копировать и вставлять.
Любая помощь будет оценена.
Что вы можете сделать, это обернуть свою метку в распознавателе жестов:
<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;
}
Так как 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
, чтобы вызвать событие нажатия.