Xamarin.Forms'dan düzen davranışı değişiklikleri
Yükseltilen .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) uygulamanızı çalıştırırken düzen davranışının farklı olduğunu fark edebilirsiniz. Bunlardan bazıları, düzen aralığı değerlerinde yapılan değişikliklerin sonucudur. Daha fazla bilgi için bkz . Xamarin.Forms'dan varsayılan değer değişiklikleri.
Aşağıdaki tabloda Xamarin.Forms ile .NET MAUI'deki düzenler arasındaki ek davranış değişiklikleri gösterilmektedir:
Düzen | Xamarin.Forms | .NET MAUI | Öneri |
---|---|---|---|
Tümünü | Bazı durumlarda boyutlandırma istekleri kabul edilmez. | Boyutlandırma istekleri yerine getirilir. | |
Grid | Sütunlar ve satırlar XAML'den çıkarılabilir. | Sütunlar ve satırlar açıkça bildirilmelidir. | ve RowDefinitionsekleyinColumnDefinitions. |
HorizontalStackLayout | *AndExpand hiçbir etkisi yoktur. |
||
RelativeLayout | Uyumluluk ad alanını gerektirir. | Bunun yerine kullanın Grid veya uyumluluk ad alanı için öğesini xmlns ekleyin. |
|
StackLayout | Alt öğeler, alanı yığınlama yönünde doldurabilir. | Alt öğeler yığılır ve kullanılabilir alanın ötesine geçer. | Alan doldurmak için alt görünümlere ihtiyacınız varsa, olarak Griddeğiştirin. |
VerticalStackLayout | *AndExpand hiçbir etkisi yoktur. |
.NET MAUI denetimleri genellikle açık boyut isteklerine göre belirlenir. Bir denetimin cihazdan bağımsız 200 birim genişliğinde olmasını isterseniz, denetimin kapsayıcısı yalnızca 100 birim genişliğinde olsa bile .NET MAUI bu denetimi 200 birim genişliğinde yapar.
Xamarin.Forms'dan varsayılan düzen değeri değişiklikleri
Xamarin.Forms doldurma, kenar boşlukları ve aralık gibi bazı özellik değerleri için rastgele varsayılan değerler kullanır. .NET MAUI bu rastgele özellik değerlerini sıfır olarak değiştirir.
Açık değerler ayarlamayen projelerde Xamarin.Forms varsayılan değerlerini korumak için projenize örtük stiller ekleyin. Örtük stiller hakkında daha fazla bilgi için bkz . Örtük stiller.
Not
.NET MAUI proje şablonu, çoğu denetim için varsayılan stiller sağlayan kaynak sözlüklerini içerir. Bu kaynak sözlüklerini değiştirerek veya bu sözlüklerden devralarak uygulamalarınızda benzer bir yaklaşım benimsemeniz önerilir.
Aşağıdaki tabloda, Xamarin.Forms ile .NET MAUI arasında değişen düzen özelliği değerleri listeleniyor:
Özellik | Xamarin.Forms değeri | .NET MAUI değeri |
---|---|---|
Grid.ColumnSpacing |
6 | 0 |
Grid.RowSpacing |
6 | 0 |
StackLayout.Spacing |
6 | 0 |
Aşağıdaki stiller Xamarin.Forms varsayılanlarını korur:
<!-- Forms defaults -->
<Style TargetType="Grid">
<Setter Property="ColumnSpacing" Value="6"/>
<Setter Property="RowSpacing" Value="6"/>
</Style>
<Style TargetType="StackLayout">
<Setter Property="Spacing" Value="6"/>
</Style>
<Style TargetType="Frame">
<Setter Property="Padding" Value="{OnPlatform 20,iOS=19}"/>
</Style>
Çerçeve
Frame tarafından .NET MAUI'de Borderdeğiştirildi. Ancak, Xamarin.Forms'dan geçişi kolaylaştırmak için de dahildir. .NET MAUI düzeni tüm platformları doğru şekilde ölçerken Frame Padding
, Xamarin.Forms'un platformlar arasında bazı tutarsızlıkları vardı. Bu, uygulamalarınızın .NET MAUI'de aynı görünmemesiyle sonuçlanabilir. Varsayılan değerleri kullanıyorsanız yukarıdaki örnekte bu durum geçerlidir.
Kılavuz
Xamarin.Forms ile .NET MAUI arasındaki en büyük davranış değişikliği Grid , kılavuzların sizin için otomatik olarak eksik satır ve sütun eklememe durumudur. Örneğin, Xamarin.Forms'da, satır davranışlarını belirtmeden öğesine Grid denetim ekleyebilirsiniz:
<Grid>
<Label Text="Hello"/>
<Label Grid.Row="1" Text="World"/>
</Grid>
Xamarin.Forms'da, öğesinin Grid iki satır içerdiği bildirilmese de ikinci bir satır sizin için otomatik olarak eklenir. .NET MAUI bunu yapmaz. Bunun yerine, özelliğiyle RowDefinitions
içinde kaç satır olduğunu Grid açıkça belirtmeniz gerekir.
Önemli
Varsayılan olarak, .NET MAUI bir sütun ve bir satır içeren bir Grid oluşturur. Bu nedenle, amacınız buysa ve RowDefinitions
özelliklerini ayarlamak ColumnDefinitions
gerekmez.
Xamarin.Forms'da, a Label
öğesinin genişliğinin ColumnDefinition
olarak ayarlandığı Auto
bir sütunda olduğunda, sözcük kaydırma ve kuyruk kesme gibi satır sonları örtük olarak gerçekleşir. .NET MAUI'de bu senaryoda satır sonları örtük olarak oluşmaz çünkü sütun, çocuğun içeriğine uyum sağlamak için ekranın genişliğini aşarak genişler. öğesinin Label kenardan Grid kaydırılmasını istiyorsanız, uygun ColumnDefinition
değeri veya değeri olarak *
ayarlamanız gerekir.
StackLayout
.NET MAUI 'deki (StackLayout, VerticalStackLayoutve ) ve HorizontalStackLayoutStackLayout
Xamarin.Forms'daki yığın düzenleri arasında birkaç fark vardır.
Temel fark, .NET MAUI yığın düzenlerinin çok basit olmasıdır. Hepsi yığılana kadar alt görünümlerini tek bir yönde yığırlar. Son alt öğe yığılana kadar devam eder, bu da onları yığınlama yönündeki kullanılabilir alanın ötesine götürse bile. Bu nedenle, .NET MAUI yığın düzenleri denetimleri belirli bir yönde düzenler. Bir boşluğu alt bölümlere ayırmıyorlar. Bu, veya gibi FillAndExpand
CenterAndExpand
herhangi bir *AndExpand
düzen seçeneğinin varlığına ve koşullara göre düzen davranışını değiştiren Xamarin.Forms StackLayout
dosyasından tamamen farklıdır. Xamarin.Forms StackLayout
bazen alanı alt bölümlere ayırır ve kapsayıcısının kenarına doğru genişletir veya durur. Diğer durumlarda kapsayıcının ötesine genişler.
.NET MAUI ve VerticalStackLayoutiçindeki yeni yığın düzenleri düzen HorizontalStackLayout seçeneklerini tanımaz*AndExpand
. Bu tür düzen seçeneklerine sahip bir çocukla karşılaşırlarsa, yalnızca orada değilmiş gibi AndExpand
davranırlar. Örneğin FillAndExpand
, Fill
olur. Bununla birlikte, Xamarin.Forms'tan geçişin basitliği için .NET MAUI StackLayout , kullanım dışı olarak işaretlenmiş olsa da düzen seçeneklerini kabul eder *AndExpand
. Eski üyeleri kullanma uyarılarını önlemek için, düzen seçeneklerini kullanan *AndExpand
düzenlerinizi uygun düzen türüne dönüştürmeniz gerekir. aşağıdaki gibi elde edilebilir:
Düzeniniz bir dışında bir StackLayoutşeyse, tüm kullanımlarını
AndExpand
kaldırın. Xamarin.Forms'da olduğu gibi.NET MAUI'de de düzen seçeneklerininAndExpand
dışında StackLayoutherhangi bir düzen üzerinde etkisi yoktur.Istifleme yönüne ortogonal olan tüm
AndExpand
özellikleri kaldırın. Örneğin, bir ileVertical
Orientation
sahipseniz StackLayout ve bir alt öğesiHorizontalAligment="CenterAndExpand"
varsa , bu düzen seçeneklerinin hiçbir etkisi yoktur ve kaldırılabilir.üzerinde StackLayoutkalan
AndExpand
özellikleriniz varsa, bunu StackLayout öğesine Griddönüştürmeniz gerekir. A Grid , bir alanı alt bölümlere ayıracak şekilde tasarlanmıştır ve Xamarin.Forms'da sağlanan düzeniAndExpand
sağlar. Aşağıdaki örnekte özelliği kullananAndExpand
bir Xamarin.FormsStackLayout
gösterilmektedir:<StackLayout> <Label Text="Hello world!"/> <Image VerticalOptions="FillAndExpand" Source="dotnetbot.png"/> </StackLayout>
Bu, .NET MAUI'de öğesine Grid dönüştürülebilir:
<Grid RowDefinitions="Auto, *"> <Label Text="Hello world!"/> <Image Grid.Row="1" Source="dotnetbot.png"/> </Grid>
Bu dönüştürmeyi gerçekleştirirken içinde işaretlenen
AndExpand
StackLayout
her şey kendi satırına veya sütununa ve içinde boyutuna*
Gridsahip olmalıdır.
Önemli
A StackLayout , içeriği tükenene kadar yığınlama yönünde devam eder. Kapsayıcısını bu eksen boyunca alt bölümlere ayırmıyor. İçeriğinizi bir yöndeki kısıtlanmış bir alanla sınırlamak istiyorsanız, gibi başka bir Griddüzen kullanmalısınız.
RelativeLayout
RelativeLayout kullanımı .NET MAUI'de önerilmez. Bunun yerine, mümkün olan her yerde bir Grid kullanın.
Kesinlikle bir RelativeLayoutgerekiyorsa, ad alanında Microsoft.Maui.Controls.Compatibility
bulunabilir:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:compat="clr-namespace:Microsoft.Maui.Controls.Compatibility;assembly=Microsoft.Maui.Controls"
x:Class="MyMauiApp.MyPage"
Title="MyPage">
<compat:RelativeLayout>
<!-- Your code goes here -->
</compat:RelativeLayout>
</ContentPage>
ScrollView
ScrollView Genellikle düzen olarak kabul edilmese de, alt içeriğini kaydırmak için kullanıldığından düzen olarak düşünülebilir. Xamarin.Forms'da, ScrollView
yığma sırasında tutarlı bir şekilde davranmaz. İçeriğine kısmen bağlı olan minimum boyut üzerinde bazı rastgele sınırları vardır ve bazen diğer öğelerin tutarsız ve bazen şaşırtıcı bir StackLayout
şekilde sayfaya sığmasını sağlamak için sıkıştırılır.
.NET MAUI'de, ScrollView aksi kısıtlanmadığı sürece, boyutu istediğiniz boyuta genişletilir. Bu, sonsuz genişleyebilecek bir VerticalStackLayoutiçinde, öğesinin ScrollView tam içerik yüksekliğine genişletileceği ve kaydırılacağı anlamına gelir. Xamarin.Forms kullanıcısıysanız bu davranış kafa karıştırıcı olabilir.