Xamarin.Forms Xamarin Yerel Projelerinde
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:
- Yerel Xamarin.Forms NuGet paketi ekleyin.
- Yerel
ContentPageprojeye türetilmiş sayfayı ve tüm bağımlılıkları ekleyin. - yöntemini
Forms.Initçağırma. - Türetilmiş sayfanın bir örneğini oluşturun ve aşağıdaki uzantı yöntemlerinden birini kullanarak uygun yerel türe
ContentPagedönüştürebilirsiniz:CreateViewControlleriOS, Android veyaCreateSupportFragmentCreateFrameworkElementUWP için. - Yerel gezinti API'sini kullanarak
ContentPagetü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.Initbaşlatılır. - Yeni bir nesnesi oluşturulur ve uygulama düzeyi kaynak sözlüğü
Xamarin.Forms.ApplicationResourceDictionaryXAML'de tanımlanan bir olarak ayarlanır. - sınıfına
AppDelegatebir başvuru, alanındastaticInstancedepolanır. Bu, diğer sınıfların sınıfında tanımlanan yöntemleri çağıracak bir mekanizmaAppDelegatesağlamaktır. - Yerel
UIWindowiOS 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.FormsContentPagebir nesneXamarin.Forms.Applicationoluşturulur. - nesnesi,
NotesPagegenişletme yöntemi kullanılarak birUIViewControllerCreateViewControllernesnesine dönüştürülür. Titleözelliği,UIViewControllerüzerinde görüntülenecek şekildeUINavigationBarayarlanır.- Hiyerarşik
AppNavigationControllergezintiyi yönetmek için oluşturulur. Bu, sınıfından türeten özel bir gezinti denetleyicisiUINavigationControllersı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ğindeAppNavigationControllerUIViewControllerAppNavigationControllersunulacaktır. - nesnesi için üst düzey olarak ayarlanır ve uygulama için anahtar penceresi olarak ayarlanır ve
AppNavigationControllerUIViewControllergörünür haleUIWindowUIWindowgelir. - Bellek
ParentsızıntısınıNotesPageönlemek içinnullnesnesinin ö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:
Ö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:
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.Initbaşlatılır. - Yeni bir nesnesi oluşturulur ve uygulama düzeyi kaynak sözlüğü
Xamarin.Forms.ApplicationResourceDictionaryXAML'de tanımlanan bir olarak ayarlanır. - sınıfına
MainActivitybir başvuru, alanındastaticInstancedepolanır. Bu, diğer sınıfların sınıfında tanımlanan yöntemleri çağıracak bir mekanizmaMainActivitysağlamaktır. - İçerik
Activitybir düzen kaynağından ayarlanır. Örnek uygulamada düzen, parça kapsayıcısı olarak hareket etmek için içeren ve içerenLinearLayoutToolbarbirFrameLayout'den oluşur. Toolbar, alınır ve eylem çubuğu olarak ayarlanır ve eylem çubuğu başlığıActivityayarlanı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.FormsContentPagebir nesneXamarin.Forms.Applicationoluşturulur. - nesnesi,
NotesPagegenişletme yöntemi kullanılarak birFragmentCreateSupportFragmentnesnesine dönüştürülür. SupportFragmentManagersınıfı, örneğini sınıf için ile değiştirenFrameLayoutbir işlem oluşturur veFragmentNotesPageişler.- Bellek
ParentsızıntısınıNotesPageönlemek içinnullnesnesinin ö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 mobil
Ö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ı
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.Accentyöntemini çağıranActivitydeğerindenForms.Initalınır. - Değeri,
Xamarin.Forms.Application.CurrentActivityyöntemini çağıran ile ilişkilendirilirForms.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
MainPagekullanıcı sayfaya geri gittiğinde yeni bir değer oluşturulur. - Sınıfına bir başvuru,
MainPagestaticInstancealanı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ırMainPage. FolderPathÖzelliği, notun verilerinin depolanacağı cihazdaki bir yola başlatılır.NotesPageXamarin.FormsContentPageXaml 'de tanımlı bir sayfa olan ve üst öğesi daha önce oluşturulan nesneye ayarlanmış olan bir nesne oluşturulurXamarin.Forms.Application.NotesPageNesnesi,FrameworkElementgenişletme yöntemi kullanılarak öğesine dönüştürülürCreateFrameworkElementve sonra sınıfının içeriği olarak ayarlanırMainPage.ParentNotesPagenullBir 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ı,
Xamarin. Forms
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ı,
Xamarin. Forms
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.
Örneği indirme
