Xamarin.Forms Xamarin Yerel Projelerinde

Örneği İndir Örneği indirme

Genellikle bir uygulama, 'den türetmiş bir veya daha fazla sayfa içerir ve bu sayfalar bir .NET Standard kitaplık projesi veya Xamarin.FormsContentPage Paylaşılan Project. Ancak, Yerel Formlar türetilmiş sayfaların yerel ContentPage Xamarin.iOS, Xamarin.Android ve UWP uygulamalarına doğrudan eklenmesini sağlar. Yerel projenin .NET Standard kitaplık projesinden veya Paylaşılan Project'den türetilmiş sayfaları tüketmesiyle karşılaştırıldığında, sayfaları doğrudan yerel projelere eklemenin avantajı, sayfaların yerel görünümlerle ContentPage genişletilmesidir. Yerel görünümler daha sonra XAML'de ile adlandırılmış x:Name ve arka koddan başvurulabilir. Yerel görünümler hakkında daha fazla bilgi için bkz. Yerel Görünümler.

Yerel projede türetilmiş bir Xamarin.FormsContentPage sayfayı tüketmek için işlem aşağıdaki gibidir:

  1. Yerel Xamarin.Forms NuGet paketi ekleyin.
  2. Yerel ContentPage projeye türetilmiş sayfayı ve tüm bağımlılıkları ekleyin.
  3. yöntemini Forms.Init çağırma.
  4. Türetilmiş sayfanın bir örneğini oluşturun ve aşağıdaki uzantı yöntemlerinden birini kullanarak uygun yerel türe ContentPage dönüştürebilirsiniz: CreateViewController iOS, Android veya CreateSupportFragmentCreateFrameworkElement UWP için.
  5. Yerel gezinti API'sini kullanarak ContentPage türetilmiş sayfanın yerel tür gösterimine gidin.

Xamarin.Forms yerel bir projenin türetilmiş bir sayfa Forms.Init oluşturmadan önce yöntemi çağrılarak ContentPage başlatılması gerekir. Bunun ne zaman gerçekleştirileceklerini seçmek öncelikli olarak uygulama akışınıza en uygun olan zamanlara bağlıdır; uygulama başlangıcında veya türetilen sayfa oluşturulmuş olmadan ContentPage hemen önce yapılabilir. Bu makalede ve beraberindeki örnek uygulamalar, uygulama Forms.Init başlangıcında yöntemi çağrılır.

Not

NativeForms örnek uygulama çözümü hiçbir proje içermez. Bunun yerine bir Xamarin.iOS projesi, bir Xamarin.Android projesi ve bir UWP projesi oluşur. Her proje, türetilmiş sayfaları tüketmek için Yerel Formlar kullanan ContentPage yerel bir projedir. Ancak, yerel projelerin bir .NET Standard kitaplık projesinden veya Paylaşılan Kitaplık projesinden türetilmiş sayfaları ContentPage Project.

Yerel Formlar Xamarin.Forms kullanılırken , ve veri bağlama altyapısı gibi özelliklerin hepsi çalışmaya devam DependencyServiceMessagingCenter ediyor. Ancak, sayfa gezintisi yerel gezinti API'si kullanılarak yapılmalıdır.

iOS

iOS'ta, FinishedLaunching sınıfındaki geçersiz AppDelegate kılma genellikle uygulama başlatmayla ilgili görevlerin gerçekleştir başlangıç yeridir. Uygulama başlatıldıktan sonra çağrılır ve genellikle ana pencereyi ve görünüm denetleyicisini yapılandırmak için geçersiz kılınır. Aşağıdaki kod örneği, AppDelegate örnek uygulamanın sınıfını gösterir:

[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
    public static AppDelegate Instance;
    UIWindow _window;
    AppNavigationController _navigation;

    public static string FolderPath { get; private set; }

    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        Forms.Init();

        // Create app-level resource dictionary.
        Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
        Xamarin.Forms.Application.Current.Resources = new MyDictionary();

        Instance = this;
        _window = new UIWindow(UIScreen.MainScreen.Bounds);

        UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
        {
            TextColor = UIColor.Black
        });

        FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));

        NotesPage notesPage = new NotesPage()
        {
            // Set the parent so that the app-level resource dictionary can be located.
            Parent = Xamarin.Forms.Application.Current
        };

        UIViewController notesPageController = notesPage.CreateViewController();
        notesPageController.Title = "Notes";

        _navigation = new AppNavigationController(notesPageController);

        _window.RootViewController = _navigation;
        _window.MakeKeyAndVisible();

        notesPage.Parent = null;
        return true;
    }
    // ...
}

FinishedLaunching metodu şu görevleri gerçekleştirir:

  • Xamarin.Forms yöntemi çağrılarak Forms.Init başlatılır.
  • Yeni bir nesnesi oluşturulur ve uygulama düzeyi kaynak sözlüğü Xamarin.Forms.ApplicationResourceDictionary XAML'de tanımlanan bir olarak ayarlanır.
  • sınıfına AppDelegate bir başvuru, alanında staticInstance depolanır. Bu, diğer sınıfların sınıfında tanımlanan yöntemleri çağıracak bir mekanizma AppDelegate sağlamaktır.
  • Yerel UIWindow iOS uygulamalarında görünümlerin ana kapsayıcısı olan , oluşturulur.
  • FolderPathözelliği, cihaz üzerinde not verisi depolandığı bir yola başlatılır.
  • XAML'de tanımlanan türetilmiş bir sayfa olan ve üst öğesi önceden oluşturulmuş nesneye ayarlanmış NotesPageXamarin.FormsContentPage bir nesne Xamarin.Forms.Application oluşturulur.
  • nesnesi, NotesPage genişletme yöntemi kullanılarak bir UIViewControllerCreateViewController nesnesine dönüştürülür.
  • Titleözelliği, UIViewController üzerinde görüntülenecek şekilde UINavigationBar ayarlanır.
  • Hiyerarşik AppNavigationController gezintiyi yönetmek için oluşturulur. Bu, sınıfından türeten özel bir gezinti denetleyicisi UINavigationController sınıfıdır. nesnesi bir görünüm denetleyicileri yığınını yönetir ve oluşturucuya geçirilen nesnesi ilk olarak yüklendiğinde AppNavigationControllerUIViewControllerAppNavigationController sunulacaktır.
  • nesnesi için üst düzey olarak ayarlanır ve uygulama için anahtar penceresi olarak ayarlanır ve AppNavigationControllerUIViewController görünür hale UIWindowUIWindow gelir.
  • Bellek Parent sızıntısını NotesPage önlemek için null nesnesinin özelliği olarak ayarlanır.

Yöntem FinishedLaunching yürütülürken, aşağıdaki ekran görüntüsünde gösterildiği gibi Xamarin.FormsNotesPage sınıfında tanımlanan kullanıcı arabirimi görüntülenir:

EkranGörüntüsünde mobil cihazda notlar ekranı gösterilir.

Önemli

Tüm türetilmiş sayfalar, sayfanın özelliği nesnesine ayarlanmışsa uygulama düzeyinde ContentPage tanımlanan kaynakları ResourceDictionaryParentApplication tüketebilir.

Kullanıcı arabirimiyle etkileşim kurmak, örneğin ' e dokunulduğunda, arka arkasındaki kodda aşağıdaki olay +ButtonNotesPage işleyicinin yürütülmesine neden olur:

void OnNoteAddedClicked(object sender, EventArgs e)
{
    AppDelegate.Instance.NavigateToNoteEntryPage(new Note());
}

staticAppDelegate.Instance alanı, AppDelegate.NavigateToNoteEntryPage aşağıdaki kod örneğinde gösterilen yönteminin çağrılmalarını sağlar:

public void NavigateToNoteEntryPage(Note note)
{
    NoteEntryPage noteEntryPage = new NoteEntryPage
    {
        BindingContext = note,
        // Set the parent so that the app-level resource dictionary can be located.
        Parent = Xamarin.Forms.Application.Current
    };

    var noteEntryViewController = noteEntryPage.CreateViewController();
    noteEntryViewController.Title = "Note Entry";

    _navigation.PushViewController(noteEntryViewController, true);
    noteEntryPage.Parent = null;
}

yöntemi, NavigateToNoteEntryPage türetilmiş Xamarin.FormsContentPage sayfayı uzantı UIViewController yöntemiyle bir CreateViewController sayfasına dönüştürür ve özelliğini TitleUIViewController ayarlar. UIViewControllerDaha sonra yöntemi tarafından üzerine AppNavigationControllerPushViewController itilir. Bu nedenle, sınıfında tanımlanan Xamarin.FormsNoteEntryPage kullanıcı arabirimi aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülenir:

uygulaması EkranGörüntüsünde mobil cihazda Not Girişi gösterilir.

görüntülendiğinde, geri gezintisi sınıfından sınıfı için kullanıcıyı sınıfına döndürerek NoteEntryPageUIViewControllerNoteEntryPageAppNavigationControllerUIViewController sınıfını NotesPage açılır. Ancak, iOS yerel gezinti yığınından bir anın atılması UIViewController ve bağlı nesnesini otomatik olarak UIViewControllerPage atmaz. Bu nedenle, AppNavigationController sınıfı görünüm PopViewController denetleyicilerini geriye doğru gezintiye atarak yöntemini geçersiz kılar:

public class AppNavigationController : UINavigationController
{
    //...
    public override UIViewController PopViewController(bool animated)
    {
        UIViewController topView = TopViewController;
        if (topView != null)
        {
            // Dispose of ViewController on back navigation.
            topView.Dispose();
        }
        return base.PopViewController(animated);
    }
}

Geçersiz PopViewControllerDispose kılma, UIViewController iOS yerel gezinti yığınından inen nesnede yöntemini çağırarak. Bunun başarısız olması ve bağlı UIViewController nesnesinin yalnız Page olmasıyla sonuçlandır.

Önemli

Yalnız kalan nesneler atık toplanabilir ve bu nedenle bellek sızıntısına neden olur.

Android

Android'de, OnCreate sınıfındaki geçersiz MainActivity kılma genellikle uygulama başlatmayla ilgili görevlerin gerçekleştir başlangıç yeridir. Aşağıdaki kod örneği, MainActivity örnek uygulamanın sınıfını gösterir:

public class MainActivity : AppCompatActivity
{
    public static string FolderPath { get; private set; }

    public static MainActivity Instance;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        Forms.Init(this, bundle);

        // Create app-level resource dictionary.
        Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
        Xamarin.Forms.Application.Current.Resources = new MyDictionary();

        Instance = this;

        SetContentView(Resource.Layout.Main);
        var toolbar = FindViewById<Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(toolbar);
        SupportActionBar.Title = "Notes";

        FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));

        NotesPage notesPage = new NotesPage()
        {
            // Set the parent so that the app-level resource dictionary can be located.
            Parent = Xamarin.Forms.Application.Current
        };
        AndroidX.Fragment.App.Fragment notesPageFragment = notesPage.CreateSupportFragment(this);

        SupportFragmentManager
            .BeginTransaction()
            .Replace(Resource.Id.fragment_frame_layout, mainPage)
            .Commit();
        //...

        notesPage.Parent = null;
    }
    ...
}

OnCreate metodu şu görevleri gerçekleştirir:

  • Xamarin.Forms yöntemi çağrılarak Forms.Init başlatılır.
  • Yeni bir nesnesi oluşturulur ve uygulama düzeyi kaynak sözlüğü Xamarin.Forms.ApplicationResourceDictionary XAML'de tanımlanan bir olarak ayarlanır.
  • sınıfına MainActivity bir başvuru, alanında staticInstance depolanır. Bu, diğer sınıfların sınıfında tanımlanan yöntemleri çağıracak bir mekanizma MainActivity sağlamaktır.
  • İçerik Activity bir düzen kaynağından ayarlanır. Örnek uygulamada düzen, parça kapsayıcısı olarak hareket etmek için içeren ve içeren LinearLayoutToolbar bir FrameLayout 'den oluşur.
  • Toolbar, alınır ve eylem çubuğu olarak ayarlanır ve eylem çubuğu başlığı Activity ayarlanır.
  • FolderPathözelliği, cihaz üzerinde not verisi depolandığı bir yola başlatılır.
  • XAML'de tanımlanan türetilmiş bir sayfa olan ve üst öğesi önceden oluşturulmuş nesneye ayarlanmış NotesPageXamarin.FormsContentPage bir nesne Xamarin.Forms.Application oluşturulur.
  • nesnesi, NotesPage genişletme yöntemi kullanılarak bir FragmentCreateSupportFragment nesnesine dönüştürülür.
  • SupportFragmentManagersınıfı, örneğini sınıf için ile değiştiren FrameLayout bir işlem oluşturur ve FragmentNotesPage işler.
  • Bellek Parent sızıntısını NotesPage önlemek için null nesnesinin özelliği olarak ayarlanır.

Parçalar hakkında daha fazla bilgi için bkz. Parçalar.

Yöntem OnCreate yürütülürken, aşağıdaki ekran görüntüsünde gösterildiği gibi Xamarin.FormsNotesPage sınıfında tanımlanan kullanıcı arabirimi görüntülenir:

uygulaması Ekran Görüntüsünde, mavi başlık ve renkli not metni olan bir mobilcihazda Notlar ekranı gösterilir.

Önemli

Tüm türetilmiş sayfalar, sayfanın özelliği nesnesine ayarlanmışsa uygulama düzeyinde ContentPage tanımlanan kaynakları ResourceDictionaryParentApplication tüketebilir.

Kullanıcı arabirimiyle etkileşim kurmak, örneğin ' e dokunulduğunda, arka arkasındaki kodda aşağıdaki olay +ButtonNotesPage işleyicinin yürütülmesine neden olur:

void OnNoteAddedClicked(object sender, EventArgs e)
{
    MainActivity.Instance.NavigateToNoteEntryPage(new Note());
}

staticMainActivity.Instance alanı, MainActivity.NavigateToNoteEntryPage aşağıdaki kod örneğinde gösterilen yönteminin çağrılmalarını sağlar:

public void NavigateToNoteEntryPage(Note note)
{
    NoteEntryPage noteEntryPage = new NoteEntryPage
    {
        BindingContext = note,
        // Set the parent so that the app-level resource dictionary can be located.
        Parent = Xamarin.Forms.Application.Current
    };

    AndroidX.Fragment.App.Fragment noteEntryFragment = noteEntryPage.CreateSupportFragment(this);
    SupportFragmentManager
        .BeginTransaction()
        .AddToBackStack(null)
        .Replace(Resource.Id.fragment_frame_layout, noteEntryFragment)
        .Commit();

    noteEntryPage.Parent = null;
}

yöntemi, türetilmiş sayfayı genişletme yöntemiyle bir sayfasına dönüştürür ve parça geri NavigateToNoteEntryPageXamarin.FormsContentPageFragmentCreateSupportFragmentFragment yığınına ekler. Bu nedenle, içinde tanımlanan Xamarin.FormsNoteEntryPage kullanıcı arabirimi aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülenir:

uygulaması Ekran Görüntüsünde, mavi başlıklıbir mobil cihazda Not Girişi gösterilir.

görüntülendiğinde, geri okuna dokunulduğunda, parça arka yığınından için açılır NoteEntryPageFragment ve sınıfı için NoteEntryPageFragment kullanıcıya geri NotesPage döner.

Geri gezinti desteğini etkinleştirme

sınıfı, SupportFragmentManager parça BackStackChanged arka yığınının içeriği her değişirken bir olayı vardır. sınıfındaki OnCreateMainActivity yöntemi, bu olay için anonim bir olay işleyicisi içerir:

SupportFragmentManager.BackStackChanged += (sender, e) =>
{
    bool hasBack = SupportFragmentManager.BackStackEntryCount > 0;
    SupportActionBar.SetHomeButtonEnabled(hasBack);
    SupportActionBar.SetDisplayHomeAsUpEnabled(hasBack);
    SupportActionBar.Title = hasBack ? "Note Entry" : "Notes";
};

Bu olay işleyicisi, parça arka yığınında bir veya daha fazla örnek olması şartıyla Fragment eylem çubuğunda bir geri düğmesi görüntüler. Geri düğmesine dokunmaya verilen yanıt, geçersiz kılma tarafından OnOptionsItemSelected uzer:

public override bool OnOptionsItemSelected(Android.Views.IMenuItem item)
{
    if (item.ItemId == global::Android.Resource.Id.Home && SupportFragmentManager.BackStackEntryCount > 0)
    {
        SupportFragmentManager.PopBackStack();
        return true;
    }
    return base.OnOptionsItemSelected(item);
}

Seçenekler OnOptionsItemSelected menüsünde bir öğe seçildiğinde geçersiz kılma çağrılır. Bu uygulama, geri düğmesinin seçili olması ve parça arka yığınında bir veya daha fazla örnek olması şartıyla geçerli parçayı parça geri Fragment yığınından çıkar.

Birden çok etkinlik

Bir uygulama birden çok etkinliklerden oluşursa, ContentPage türetilmiş sayfalar etkinliklerin her bir içine katıştırabilirsiniz. Bu senaryoda yöntemi Forms.Init yalnızca bir katıştıran OnCreate ilk geçersiz Activity kılmada çağrılmak Xamarin.FormsContentPage gerekir. Ancak bu durum aşağıdaki etkiyi etkiler:

  • değeri, Xamarin.Forms.Color.Accent yöntemini çağıran Activity değerinden Forms.Init alınır.
  • Değeri, Xamarin.Forms.Application.CurrentActivity yöntemini çağıran ile ilişkilendirilir Forms.Init .

Dosya seçin

Bir ContentPageWebView HTML "Dosya Seç" düğmesini desteklemesi gereken bir kullanan bir türetilmiş sayfayı Katıştırırken, Activity yöntemi geçersiz kılmalıdır OnActivityResult :

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    ActivityResultCallbackRegistry.InvokeCallback(requestCode, resultCode, data);
}

UWP

UWP 'de, yerel App sınıf genellikle uygulama başlatma ile ilgili görevleri gerçekleştirmek için yer alır. Xamarin.Forms , Xamarin.FormsOnLaunchedApp bağımsız değişkenini yöntemine geçirmek için, genel olarak, UWP uygulamalarında yerel sınıftaki geçersiz kılmada başlatılır LaunchActivatedEventArgsForms.Init . Bu nedenle, türetilmiş bir sayfayı kullanan yerel UWP uygulamaları, yöntemi Xamarin.FormsContentPage yöntemden en kolay şekilde çağırabilir Forms.InitApp.OnLaunched :

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    // ...
    Xamarin.Forms.Forms.Init(e);

    // Create app-level resource dictionary.
    Xamarin.Forms.Application.Current = new Xamarin.Forms.Application();
    Xamarin.Forms.Application.Current.Resources = new MyDictionary();

    // ...
}

Ayrıca, OnLaunched yöntemi uygulamanın gerektirdiği uygulama düzeyi kaynak sözlüğünü de oluşturabilir.

Varsayılan olarak, yerel App sınıf MainPage sınıfını uygulamanın ilk sayfası olarak başlatır. Aşağıdaki kod örneği MainPage örnek uygulamadaki sınıfını göstermektedir:

public sealed partial class MainPage : Page
{
    NotesPage notesPage;
    NoteEntryPage noteEntryPage;

    public static MainPage Instance;
    public static string FolderPath { get; private set; }

    public MainPage()
    {
        this.NavigationCacheMode = NavigationCacheMode.Enabled;
        Instance = this;
        FolderPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData));

        notesPage = new Notes.UWP.Views.NotesPage
        {
            // Set the parent so that the app-level resource dictionary can be located.
            Parent = Xamarin.Forms.Application.Current
        };
        this.Content = notesPage.CreateFrameworkElement();
        // ...
        notesPage.Parent = null;    
    }
    // ...
}

MainPageOluşturucu aşağıdaki görevleri gerçekleştirir:

  • Önbelleğe Alma sayfa için etkinleştirilir, böylece MainPage kullanıcı sayfaya geri gittiğinde yeni bir değer oluşturulur.
  • Sınıfına bir başvuru, MainPagestaticInstance alanında depolanır. Bu, sınıfında tanımlanan yöntemleri çağırmak için diğer sınıfların bir mekanizmasını sağlamaktır MainPage .
  • FolderPathÖzelliği, notun verilerinin depolanacağı cihazdaki bir yola başlatılır.
  • NotesPageXamarin.FormsContentPage Xaml 'de tanımlı bir sayfa olan ve üst öğesi daha önce oluşturulan nesneye ayarlanmış olan bir nesne oluşturulur Xamarin.Forms.Application .
  • NotesPageNesnesi, FrameworkElement genişletme yöntemi kullanılarak öğesine dönüştürülür CreateFrameworkElement ve sonra sınıfının içeriği olarak ayarlanır MainPage .
  • ParentNotesPagenull Bir bellek sızıntısını engellemek için nesnesinin özelliği olarak ayarlanır.

MainPageOluşturucu yürütüldükten sonra, Xamarin.FormsNotesPage aşağıdaki ekran görüntüsünde gösterildiği gibi sınıfta tanımlanan Kullanıcı arabirimi görüntülenir:

XAML UI "Data-LinkType =" göreli yol ">ekran görüntüsü Ile Xamarin. Forms UWP uygulaması, Notlar ve tarih/saat içeren bir not sayfası gösterir. Xamarin. Forms Screenshot shows a Notes page with notes and date/times. xaml Kullanıcı arabirimi "Data-LinkType =" göreli yol "/>

Önemli

Tüm ContentPage türetilmiş sayfalar, ResourceDictionaryParent sayfanın özelliğinin nesnesine ayarlandığı şekilde, uygulama düzeyinde tanımlanan kaynakları kullanabilir Application .

Kullanıcı arabirimi ile etkileşim kurma (örneğin, öğesine dokunarak), +ButtonNotesPage arka plan kod yürütme sırasında aşağıdaki olay işleyicisine neden olur:

void OnNoteAddedClicked(object sender, EventArgs e)
{
    MainPage.Instance.NavigateToNoteEntryPage(new Note());
}

staticMainPage.Instance Alan, MainPage.NavigateToNoteEntryPage Aşağıdaki kod örneğinde gösterilen yöntemin çağrılmasını sağlar:

public void NavigateToNoteEntryPage(Note note)
{
    noteEntryPage = new Notes.UWP.Views.NoteEntryPage
    {
        BindingContext = note,
        // Set the parent so that the app-level resource dictionary can be located.
        Parent = Xamarin.Forms.Application.Current
    };
    this.Frame.Navigate(noteEntryPage);
    noteEntryPage.Parent = null;
}

UWP 'de gezinti, genellikle Frame.Navigate bir bağımsız değişken alan yöntemiyle gerçekleştirilir Page . Xamarin.FormsFrame.Navigatetüretilmiş bir sayfa örneğini alan bir genişletme yöntemi tanımlar ContentPage . Bu nedenle, NavigateToNoteEntryPage yöntemi yürütüldüğünde, içinde tanımlanan Kullanıcı arabirimi, Xamarin.FormsNoteEntryPage aşağıdaki ekran görüntüsünde gösterildiği gibi görüntülenir:

XAML UI "Data-LinkType =" göreli yol ">ekran görüntüsü Ile Xamarin. Forms UWP uygulaması, Not girildi metin kutusu içeren bir not sayfası gösterir. Xamarin. Forms Screenshot shows a Notes page with a text box with a note entered. xaml Kullanıcı arabirimi "Data-LinkType =" göreli yol "/>

Görüntülendiğinde, NoteEntryPage geri okuna dokunarak ' FrameworkElementNoteEntryPage ın uygulama içi arka yığınından öğesine dönmesi için, kullanıcıyı sınıfına döndüren öğesine açılır FrameworkElementNotesPage .

Sayfa yeniden boyutlandırma desteğini etkinleştir

UWP uygulama penceresi yeniden boyutlandırılırken Xamarin.Forms içeriğin da yeniden boyutlandırılması gerekir. Bu, oluşturucuya olay için bir olay işleyicisi kaydederek yapılır LoadedMainPage :

public MainPage()
{
    // ...
    this.Loaded += OnMainPageLoaded;
    // ...
}

Bu Loaded olay, Sayfa düzenlendiğinde, işlendiğinde ve etkileşim için hazır olduğunda harekete geçirilir ve OnMainPageLoaded yöntemi yanıt olarak yürütür:

void OnMainPageLoaded(object sender, RoutedEventArgs e)
{
    this.Frame.SizeChanged += (o, args) =>
    {
        if (noteEntryPage != null)
            noteEntryPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
        else
            notesPage.Layout(new Xamarin.Forms.Rectangle(0, 0, args.NewSize.Width, args.NewSize.Height));
    };
}

OnMainPageLoadedYöntemi, olay için anonim bir olay işleyicisini kaydeder Frame.SizeChanged , bu, ActualHeight veya ActualWidth özellikleri üzerinde değiştiğinde tetiklenir Frame . Yanıt ' da, Xamarin.Forms etkin sayfanın içeriği yöntemi çağırarak yeniden boyutlandırılır Layout .

Arka gezinti desteğini etkinleştir

UWP 'de uygulamalar, farklı cihaz formu faktörlerinde tüm donanım ve yazılım geri düğmeleri için yeniden gezinmeyi etkinleştirmelidir. Bu, oluşturucuda gerçekleştirilebilecek olay için bir olay işleyicisi kaydederek gerçekleştirilebilir BackRequestedMainPage :

public MainPage()
{
    // ...
    SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;
}

Uygulama başlatıldığında, GetForCurrentView yöntemi SystemNavigationManager geçerli görünümle ilişkili nesneyi alır, ardından olay için bir olay işleyicisi kaydeder BackRequested . Uygulama yalnızca ön plan uygulaması ise ve yanıt olarak olay işleyicisini çağırdığında bu olayı alır OnBackRequested :

void OnBackRequested(object sender, BackRequestedEventArgs e)
{
    Frame rootFrame = Window.Current.Content as Frame;
    if (rootFrame.CanGoBack)
    {
        e.Handled = true;
        rootFrame.GoBack();
        noteEntryPage = null;
    }
}

OnBackRequestedOlay işleyicisi, GoBack uygulamanın kök çerçevesinde yöntemini çağırır ve BackRequestedEventArgs.Handledtrue olayı işlenmiş olarak işaretlemek için özelliğini olarak ayarlar. Olayı işlenmiş olarak işaretlememe hatası, olayın yoksayılmasına neden olabilir.

Uygulama, başlık çubuğunda bir geri düğmesi gösterilip gösterilmeyeceğini seçer. Bu, AppViewBackButtonVisibility özelliği AppViewBackButtonVisibility sınıfında sabit listesi değerlerinden birine ayarlanarak elde edilir App :

void OnNavigated(object sender, NavigationEventArgs e)
{
    SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
        ((Frame)sender).CanGoBack ? AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
}

OnNavigatedOlay tetiklemeine yanıt olarak yürütülen olay işleyicisi Navigated , sayfa gezintisi gerçekleştiğinde başlık çubuğunun geri düğmesinin görünürlüğünü günceller. Bu, uygulama içi arka Stack boş değilse başlık çubuğunun geri düğmesinin görünmesini sağlar veya uygulama içi arka yığın boşsa başlık çubuğundan kaldırılır.

UWP 'de arka gezinti desteği hakkında daha fazla bilgi için bkz. UWP uygulamaları Için gezinme geçmişi ve geriye doğru gezinme.