Ответ 1
Там обсуждается несколько вещей, так голые со мной: -
Фрагмент изображения, из которого я понимаю: -
"Not only are Xamarin.Forms pages mixable with custom screens" ...
Это похоже на то, что упоминает @Stephane, позволяющее приложению использовать собственные экраны , а как экраны Xamarin.Forms. Каждая страница-заглушка платформы может представить общую страницу Xamarin.Forms в любой точке приложения. Вам не нужно использовать Xamarin.Forms Навигационный стек.
"but you can embed custom views built directly against Xamarin.IOS and Xamarin.Android into Xamarin.Forms pages."
Это то, что упоминает @Sten, где, если вы создаете специфичную для платформы ContentRenderers, вы можете визуализировать любые собственные средства управления в существующую Xamarin.Forms, передав этот общий Просмотр для каждого рендеринга платформы.
Итак, например, если у вас был Вид: -
public class MyView : ContentView
{
// Create some bindable properties here that can be used in your platform specific renderer,
// i.e. DisplayText etc.
}
Вы можете использовать приведенное выше в определении страницы Xamarin.Forms, а затем создать определенные для платформы средства визуализации, которые будут вызываться для рендеринга содержимого.
Именно из этих классов конкретных классов рендеринга платформы вы можете использовать собственные элементы управления на каждой платформе.
Например, в ContentRenderer для события OnElementChanged вы можете сделать что-то вроде следующего для WindowsPhone: -
protected override void OnElementChanged(Xamarin.Forms.Platform.WinPhone.ElementChangedEventArgs<MyView> e)
{
base.onElementChanged(e);
...
System.Windows.Controls.TextBox objPlatformSpecificTextBox = new System.Windows.Controls.TextBox();
...
...
Однако то, что @Gulshan действительно хочет, я считаю, что главная страница, центральная, с Xamarin.Forms содержимое будет отображаться в определенную точку на уже существующей собственной странице.
Его вид-обратный, в мышлении, однако это все еще возможно: -
Чтобы достичь этого, вам нужно стимулировать создание страницы в временную новую страницу.
Например, в WindowsPhone вы сделаете это через: -
PhoneApplicationPage objInnerPage_Temp = new PhoneApplicationPage();
UIElement objInnerContent = App.GetMainPage().ConvertPageToUIElement(objInnerPage_Temp);
на специальной странице на платформе .
Затем вы можете вставить отображаемое содержимое в собственный контейнер, подходящий на платформе, т.е. Сетка.
Обновление 1: -
==========
Хотя это очень легко сделать на WindowsPhone, похоже, что это невозможно при попытке чего-то похожего в Android.
Создание страницы Android сильно заблокировано, т.е. вы не можете получить доступ к частным полям для canvas и/или макет, который он использует внутри AndroidActivity.
Если бы это было возможно, вы могли бы повторно использовать это и отобразить содержимое, а добавить, похожее на решение для платформы WindowsPhone.
Кроме того, класс Платформа помечен как внутренний также, предотвращая другой способ создания отображаемого содержимого.
Была надежда, что я думаю о приближении к ней из Фрагмента реализации генерации Activity в нее, и это может сработать. Однако проблема здесь в том, что реализация в Xamarin.Forms ожидает наличия ActionBar, которого нет, и они не проверяют сценарий if, если разрешить выполнение продолжить, если он недоступен, поэтому он генерирует исключение, предотвращающее создание содержимого страницы.
Не кажется ли это возможным?, если они не открывают поля макета/холста в AndroidActivity или не задают проблему ожидания ActionBar.