Aracılığıyla paylaş


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ığı Autobir 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 CenterAndExpandherhangi bir *AndExpand düzen seçeneğinin varlığına ve koşullara göre düzen davranışını değiştiren Xamarin.Forms StackLayoutdosyası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:

  1. Düzeniniz bir dışında bir StackLayoutşeyse, tüm kullanımlarını AndExpandkaldırın. Xamarin.Forms'da olduğu gibi.NET MAUI'de de düzen seçeneklerinin AndExpand dışında StackLayoutherhangi bir düzen üzerinde etkisi yoktur.

  2. Istifleme yönüne ortogonal olan tüm AndExpand özellikleri kaldırın. Örneğin, bir ile VerticalOrientation sahipseniz StackLayout ve bir alt öğesi HorizontalAligment="CenterAndExpand" varsa , bu düzen seçeneklerinin hiçbir etkisi yoktur ve kaldırılabilir.

  3. ü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üzeni AndExpand sağlar. Aşağıdaki örnekte özelliği kullanan AndExpand bir Xamarin.Forms StackLayout 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.