Xamarin.Forms FlyoutPage
Açılır sayfa genellikle aşağıdaki ekran görüntülerinde gösterildiği gibi öğelerin listesini görüntüler:
Öğe listesinin konumu her platformda aynıdır ve öğelerden biri seçildiğinde ilgili ayrıntı sayfasına gider. Buna ek olarak, açılır sayfada etkin ayrıntı sayfasına gitmek için kullanılabilecek bir düğme içeren bir gezinti çubuğu da bulunur:
- iOS'ta, gezinti çubuğu sayfanın üst kısmında bulunur ve ayrıntı sayfasına gitmek için bir düğme vardır. Buna ek olarak, açılır öğe sola çekilerek etkin ayrıntı sayfasına gidilebilir.
- Android'de, sayfanın üst kısmında gezinti çubuğu bulunur ve ayrıntı sayfasına gitmek için bir başlık, simge ve bir düğme görüntüler. Simge, Android platformuna
[Activity]
özgü projede sınıfı süsleyenMainActivity
özniteliğinde tanımlanır. Buna ek olarak, açılır sayfa sola çekilerek, ekranın sağ ucundaki ayrıntı sayfasına dokunarak ve ekranın en altındaki Geri düğmesine dokunarak etkin ayrıntı sayfasına gidilebilir. - Evrensel Windows Platformu (UWP) üzerinde, gezinti çubuğu sayfanın üst kısmında bulunur ve ayrıntı sayfasına gitmek için bir düğme vardır.
Ayrıntı sayfasında, açılır sayfada seçilen öğeye karşılık gelen veriler görüntülenir ve ayrıntı sayfasının ana bileşenleri aşağıdaki ekran görüntülerinde gösterilir:
Ayrıntı sayfasında içeriği platforma bağımlı olan bir gezinti çubuğu bulunur:
- iOS'ta, gezinti çubuğu sayfanın üst kısmında bulunur ve bir başlık görüntüler ve ayrıntı sayfası örneğinin örnekte sarmalanmış
NavigationPage
olması koşuluyla açılır sayfaya dönen bir düğme vardır. Buna ek olarak, sağdan ayrıntı sayfası çekilerek açılır sayfaya geri dönülebilir. - Android'de sayfanın üst kısmında bir gezinti çubuğu bulunur ve açılır sayfaya dönen bir başlık, simge ve düğme görüntülenir. Simge, Android platformuna
[Activity]
özgü projede sınıfı süsleyenMainActivity
özniteliğinde tanımlanır. - UWP'de, gezinti çubuğu sayfanın üst kısmında bulunur ve bir başlık görüntüler ve açılır sayfaya dönen bir düğme vardır.
Gezinti davranışı
Açılır sayfa ve ayrıntı sayfaları arasındaki gezinti deneyiminin davranışı platforma bağlıdır:
- iOS'ta, açılır sayfa soldan kaydırılırken ayrıntı sayfası sağa doğru kaydırılır ve ayrıntı sayfasının sol kısmı görünmeye devam eder.
- Android'de ayrıntı ve açılır sayfalar birbirleri üzerinde yer alır.
- UWP'de, özelliği olarak ayarlanmış
Popover
olması koşuluyla açılır sayfa, ayrıntı sayfasının sol kısmındanFlyoutLayoutBehavior
kaydırılır.
iOS ve Android'deki açılır sayfanın dikey modda açılır sayfayla benzer bir genişliğe sahip olması dışında benzer davranışlar yatay modda gözlemlenir, bu nedenle ayrıntı sayfasının daha fazlası görünür.
Gezinti davranışını denetleme hakkında bilgi için bkz . Ayrıntı sayfası düzeni davranışını denetleme.
FlyoutPage oluşturma
AFlyoutPage
, açılır öğe ve Detail
ayrıntı sayfalarını sırasıyla almak ve ayarlamak için kullanılan türündeki ve özelliklerini Page
içerirFlyout
.
Önemli
, FlyoutPage
kök sayfa olacak şekilde tasarlanmıştır ve bunu diğer sayfa türlerinde alt sayfa olarak kullanmak beklenmeyen ve tutarsız davranışlara neden olabilir. Ayrıca, bir açılır sayfasının FlyoutPage
her zaman bir ContentPage
örnek olması ve ayrıntı sayfasının yalnızca , NavigationPage
ve ContentPage
örnekleriyle TabbedPage
doldurulması önerilir. Bu, tüm platformlarda tutarlı bir kullanıcı deneyimi sağlamaya yardımcı olur.
Aşağıdaki XAML kodu örneği, ve Detail
özelliklerini ayarlayan Flyout
bir FlyoutPage
gösterir:
<FlyoutPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:FlyoutPageNavigation;assembly=FlyoutPageNavigation"
x:Class="FlyoutPageNavigation.MainPage">
<FlyoutPage.Flyout>
<local:FlyoutMenuPage x:Name="flyoutPage" />
</FlyoutPage.Flyout>
<FlyoutPage.Detail>
<NavigationPage>
<x:Arguments>
<local:ContactsPage />
</x:Arguments>
</NavigationPage>
</FlyoutPage.Detail>
</FlyoutPage>
Aşağıdaki kod örneği C# dilinde oluşturulan eşdeğeri FlyoutPage
gösterir:
public class MainPageCS : FlyoutPage
{
FlyoutMenuPageCS flyoutPage;
public MainPageCS()
{
flyoutPage = new FlyoutMenuPageCS();
Flyout = flyoutPage;
Detail = new NavigationPage(new ContactsPageCS());
...
}
...
}
Flyout
özelliği bir ContentPage
örneğe ayarlanır. Detail
özelliği, bir örneği içeren bir NavigationPage
ContentPage
olarak ayarlanır.
Açılır sayfayı oluşturma
Aşağıdaki XAML kod örneği, özelliği aracılığıyla başvurulan nesnesinin bildirimini FlyoutMenuPage
Flyout
gösterir:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="using:FlyoutPageNavigation"
x:Class="FlyoutPageNavigation.FlyoutMenuPage"
Padding="0,40,0,0"
IconImageSource="hamburger.png"
Title="Personal Organiser">
<StackLayout>
<ListView x:Name="listView" x:FieldModifier="public">
<ListView.ItemsSource>
<x:Array Type="{x:Type local:FlyoutPageItem}">
<local:FlyoutPageItem Title="Contacts" IconSource="contacts.png" TargetType="{x:Type local:ContactsPage}" />
<local:FlyoutPageItem Title="TodoList" IconSource="todo.png" TargetType="{x:Type local:TodoListPage}" />
<local:FlyoutPageItem Title="Reminders" IconSource="reminders.png" TargetType="{x:Type local:ReminderPage}" />
</x:Array>
</ListView.ItemsSource>
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Padding="5,10">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding IconSource}" />
<Label Grid.Column="1" Text="{Binding Title}" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
Sayfa, özelliğini bir ListView
nesne dizisine ayarlayarak ItemsSource
XAML'deki verilerle doldurulmuş bir öğeden FlyoutPageItem
oluşur. Her FlyoutPageItem
bir , IconSource
ve TargetType
özelliklerini tanımlarTitle
.
DataTemplate
her öğesini görüntülemek FlyoutPageItem
için ListView.ItemTemplate
özelliğine A atanır. , DataTemplate
ve ViewCell
öğelerinden Image
oluşan bir Label
içerir. , Image
özellik değerini görüntüler IconSource
ve Label
her FlyoutPageItem
için özellik değerini görüntülerTitle
.
Sayfanın Title
ve IconImageSource
özellikleri ayarlanmıştır. Simge, ayrıntı sayfasında başlık çubuğu olması koşuluyla görüntülenir. Bu, iOS'ta ayrıntı sayfası örneğini bir NavigationPage
örnekte kaydırarak etkinleştirilmelidir.
Aşağıdaki kod örneği, C# dilinde oluşturulan eşdeğer sayfayı gösterir:
public class FlyoutMenuPageCS : ContentPage
{
ListView listView;
public ListView ListView { get { return listView; } }
public FlyoutMenuPageCS()
{
var flyoutPageItems = new List<FlyoutPageItem>();
flyoutPageItems.Add(new FlyoutPageItem
{
Title = "Contacts",
IconSource = "contacts.png",
TargetType = typeof(ContactsPageCS)
});
flyoutPageItems.Add(new FlyoutPageItem
{
Title = "TodoList",
IconSource = "todo.png",
TargetType = typeof(TodoListPageCS)
});
flyoutPageItems.Add(new FlyoutPageItem
{
Title = "Reminders",
IconSource = "reminders.png",
TargetType = typeof(ReminderPageCS)
});
listView = new ListView
{
ItemsSource = flyoutPageItems,
ItemTemplate = new DataTemplate(() =>
{
var grid = new Grid { Padding = new Thickness(5, 10) };
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30) });
grid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Star });
var image = new Image();
image.SetBinding(Image.SourceProperty, "IconSource");
var label = new Label { VerticalOptions = LayoutOptions.FillAndExpand };
label.SetBinding(Label.TextProperty, "Title");
grid.Children.Add(image);
grid.Children.Add(label, 1, 0);
return new ViewCell { View = grid };
}),
SeparatorVisibility = SeparatorVisibility.None
};
IconImageSource = "hamburger.png";
Title = "Personal Organiser";
Padding = new Thickness(0, 40, 0, 0);
Content = new StackLayout
{
Children = { listView }
};
}
}
Aşağıdaki ekran görüntüleri, her platformdaki açılır sayfayı gösterir:
Ayrıntı sayfasını oluşturma ve görüntüleme
ÖrneğiFlyoutMenuPage
, örneğin olayı işlemek için bir olay işleyicisi kaydedebilmesi MainPage
FlyoutPage
için örneğini ItemSelected
kullanıma sunan ListView
bir özellik içerirListView
. Bu, örneğin özelliğini seçili ListView
öğeyi temsil eden sayfaya ayarlamasını Detail
sağlarMainPage
. Aşağıdaki kod örneği olay işleyicisini gösterir:
public partial class MainPage : FlyoutPage
{
public MainPage()
{
...
flyoutPage.listView.ItemSelected += OnItemSelected;
}
void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var item = e.SelectedItem as FlyoutPageItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
flyoutPage.listView.SelectedItem = null;
IsPresented = false;
}
}
}
OnItemSelected
yöntemi aşağıdaki eylemleri gerçekleştirir:
- örneğinden
ListView
öğesini alırSelectedItem
ve olmaması koşuluylanull
, ayrıntı sayfasını özelliğindeTargetType
FlyoutPageItem
depolanan sayfa türünün yeni bir örneğine ayarlar. Üzerindeki özelliğiFlyoutMenuPage
aracılığıylaIconImageSource
başvurulan simgenin iOS'taki ayrıntı sayfasında gösterildiğinden emin olmak için sayfa türü birNavigationPage
örneğe sarmalanır. - öğesindeki
ListView
seçili öğe, bir sonrakiFlyoutMenuPage
sunuda öğelerin hiçbirininListView
seçilmeyeceği şekilde ayarlanırnull
. - Ayrıntı sayfası, özelliği
false
olarak ayarlanarakFlyoutPage.IsPresented
kullanıcıya sunulur. Bu özellik açılır öğe veya ayrıntı sayfasının sunulup sunulmayacağını denetler. Açılır sayfayı görüntülemek ve ayrıntı sayfasını görüntülemek içinfalse
olarak ayarlanmalıdırtrue
.
Aşağıdaki ekran görüntüleri, açılır sayfada seçildikten sonra gösterilen ayrıntı sayfasını gösterir ContactPage
:
Ayrıntı sayfası düzeni davranışını denetleme
FlyoutPage
Açılır öğe ve ayrıntı sayfalarını yönetme şekli, uygulamanın telefon veya tablette çalışıp çalışmadığına, cihazın yönüne ve özelliğin FlyoutLayoutBehavior
değerine bağlıdır. Bu özellik, ayrıntı sayfasının nasıl görüntüleneceğini belirler. Olası değerler şunlardır:
Default
– Sayfalar platform varsayılanı kullanılarak görüntülenir.Popover
– Ayrıntı sayfası açılır sayfayı kapsar veya kısmen kapsar.Split
– Açılır sayfa solda, ayrıntı sayfası ise sağda görüntülenir.SplitOnLandscape
– Cihaz yatay yöndeyken bölünmüş ekran kullanılır.SplitOnPortrait
– Cihaz dikey yöndeyken bölünmüş ekran kullanılır.
Aşağıdaki XAML kod örneğinde özelliğinin FlyoutLayoutBehavior
FlyoutPage
nasıl ayarlanacağı gösterilmektedir:
<FlyoutPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="FlyoutPageNavigation.MainPage"
FlyoutLayoutBehavior="Popover">
...
</FlyoutPage>
Aşağıdaki kod örneği C# dilinde oluşturulan eşdeğeri FlyoutPage
gösterir:
public class MainPageCS : FlyoutPage
{
FlyoutMenuPageCS flyoutPage;
public MainPageCS()
{
...
FlyoutLayoutBehavior = FlyoutLayoutBehavior.Popover;
}
}
Önemli
özelliğinin FlyoutLayoutBehavior
değeri yalnızca tabletlerde veya masaüstünde çalışan uygulamaları etkiler. Telefonlarda çalışan uygulamaların her zaman davranışı vardır Popover
.