FmgLib.MauiMarkup Dokümantasyonu

August 15, 2026 · View on GitHub

FmgLib.MauiMarkup, .NET MAUI için akıcı (fluent) bir C# markup kütüphanesidir. Tüm kullanıcı arayüzünüzü — XAML'e hiç ihtiyaç duymadan — saf C# ile geliştirmenizi sağlar. Her MAUI kontrolünün her bindable özelliği ve olayı (event) için otomatik üretilmiş, okunabilir ve zincirlenebilir genişletme metotları sunar.

new Label()
    .Text("Merhaba, FmgLib!")
    .FontSize(30)
    .TextColor(Colors.Green)
    .Center()

Bu dokümantasyon, kütüphane için eksiksiz ve kendi kendine yeten bir rehberdir. Proje README'sindeki her başlık burada çok daha derinlemesine ele alınmış; ayrıca kütüphanenin kaynak kodundan çıkarılan, README'de yer almayan kullanım kalıpları da eklenmiştir.

🇬🇧 English version of this documentation lives in the parent docs/ folder.

İçindekiler

1. Temeller

DokümanÖğrenecekleriniz
BaşlarkenKurulum, proje şablonları, ilk uygulama, proje yapısı
XAML'den C#'aXAML kavramlarının FmgLib.MauiMarkup karşılıkları, yan yana dönüşümler
Fluent ÖzelliklerDört overload kalıbı; tema/platform/idiom bazlı değerler, dinamik kaynaklar
Nesne Referansları (Assign)Assign, InvokeOnElement, RegisterName; alan tanımlamadan kontrole erişim

2. Veri Bağlama (Data Binding)

DokümanÖğrenecekleriniz
Özellik BağlamaPath, Source, BindingMode, StringFormat, fallback değerleri, düşük seviye Bind() API'si
Binding Converter'larıSatır içi Convert/ConvertBack, IValueConverter, func tabanlı converter'lar
MultiBindingBirden çok binding'i tek özellikte birleştirme, IMultiValueConverter
Derlenmiş Binding'lerGetter/Setter expression binding'leri, Binding.Create, performans

3. Yerleşim (Layout)

DokümanÖğrenecekleriniz
Yerleşim SeçenekleriHizalama ve doldurma yardımcıları (Center, AlignTopLeft, FillHorizontal, …)
GridSatır/sütun tanım builder'ları (Star, Auto, Absolute), çocukları konumlandırma
Metin HizalamaITextAlignment yardımcıları (TextCenter, TextTopLeft, …)
Attached Property'lerGrid, Shell, Semantic, Automation… için tam eşleme tablosu ve örnekler

4. Etkileşim

DokümanÖğrenecekleriniz
Olay İşleyicilerOn<EventName> metotları, method group ve satır içi lambda kullanımı
Jest TanıyıcılarTap, pan, pointer, swipe, pinch, sürükle & bırak
Behavior'larYeniden kullanılabilir behavior ekleme, özel behavior yazma
Trigger'larProperty, data, event, multi ve state trigger'ları
MenülerBağlam menüleri (MenuFlyout), menü çubukları, klavye kısayolları
SwipeViewKaydırmalı aksiyon satırları, SwipeItem, özel swipe içerikleri

5. Görünüm

DokümanÖğrenecekleriniz
StillerStyle<T>, resource dictionary'ler, BasedOn, türetilmiş tipler, uygulama geneli temalar
Visual State'lerVisualState<T>, yerleşik state adları, state'e bağlı animasyonlar
Gradyanlar ve FırçalarDoğrusal/dairesel gradyanlar, düz fırçalar, gölgeler
Şekiller ve GeometrilerÇizgiler, dikdörtgenler, elipsler, poligonlar, Path geometrileri, kırpma
Biçimli MetinFormattedString/Span, karışık stiller, tıklanabilir satır içi bağlantılar
AnimasyonlarÜretilen Animate…To yardımcıları, MAUI animasyonlarıyla birlikte kullanım

6. Uygulama Mimarisi

DokümanÖğrenecekleriniz
Shell UygulamalarıC# ile Shell kurma; flyout, sekmeler, şablonlar, navigasyon
Application ve PencerelerApplication kurulumu, pencere yaşam döngüsü, TitleBar, NavigationPage/TabbedPage/FlyoutPage
Hot ReloadIFmgLibHotReload, FmgLibContentPage, MVVM sayfa taban sınıfları, IDE destek matrisi
Koleksiyonlar ve ŞablonlarCollectionView, ItemTemplate overload'ları, BindableLayout, EmptyView
Yerelleştirme (JSON)JSON dosyası tabanlı yerelleştirme, çalışma zamanında dil değiştirme
Yerelleştirme (RESX)TranslatorResx ile RESX tabanlı yerelleştirme

7. Genişletme ve Referans

DokümanÖğrenecekleriniz
Üçüncü Parti Kontroller[MauiMarkup], [MauiMarkupAttachedProp], otomatik generator modu
Özel Genişletme MetotlarıHer bağlamda çalışan kendi fluent metotlarınızı yazma
Yardımcı MetotlarToColor, koleksiyon yardımcıları, AddRangeMarkup, stil interop
Tam ÖrneklerEksiksiz sayfalar: giriş ekranı, ürün listesi, ayarlar sayfası, MVVM kalıpları
İpuçları ve Sorun GidermeSık yapılan hatalar, adlandırma kuralları, SSS
AI SkillsYapay zekâ ajanlarına doğru FmgLib.MauiMarkup yazmayı öğreten on kurulabilir skill paketi
CommunityToolkit.Maui.Markup ile KarşılaştırmaMAUI için iki C# markup kütüphanesinin dürüst, özellik özellik karşılaştırması

Önerilen Öğrenme Yolu

  1. Kütüphaneye yeni misiniz? Önce Başlarken, ardından XAML'den C#'a ve Fluent Özellikler. Bu üç doküman günlük kullanımın %80'ini kapsar.
  2. Gerçek sayfalar mı geliştiriyorsunuz? Yerleşim Seçenekleri, Grid, Özellik Bağlama ve Hot Reload ile devam edin.
  3. Uygulamayı cilalıyor musunuz? Stiller, Visual State'ler, Trigger'lar ve Animasyonlar.
  4. Birden çok pazara mı çıkıyorsunuz? Yerelleştirme (JSON) veya Yerelleştirme (RESX).
  5. SkiaSharp, ZXing, UraniumUI, InputKit… mi kullanıyorsunuz? Üçüncü Parti Kontroller.

Paketler

PaketAmaç
FmgLib.MauiMarkupMarkup kütüphanesinin kendisi + Roslyn source generator
FmgLib.MauiMarkup.Templatedotnet new proje şablonu (fmglib-mauimarkup-app)

30 Saniyede Temel Fikir

Her MAUI kontrolünün her bindable özelliği, özellikle aynı adı taşıyan bir fluent genişletme metodu alır. Her olay bir On<EventName> metodu alır. Tüm metotlar kontrolün kendisini döndürür; böylece çağrılar doğal biçimde zincirlenir ve C# kodunuzun girintisi görsel ağacı birebir yansıtır — tıpkı XAML gibi, ama tam IntelliSense, yeniden adlandırma desteği, derleme zamanı güvenliği ile ve iki dil arasında gidip gelmeden.

public partial class MainPage : ContentPage, IFmgLibHotReload
{
    int count = 0;

    public MainPage() => this.InitializeHotReload();

    public void Build() =>
        this.Content(
            new VerticalStackLayout()
            .Spacing(25)
            .Padding(30)
            .Center()
            .Children(
                new Image()
                    .Source("dotnet_bot.png")
                    .HeightRequest(200)
                    .CenterHorizontal(),

                new Label()
                    .Text("Merhaba, Dünya!")
                    .FontSize(32)
                    .CenterHorizontal(),

                new Button()
                    .Text("Bana tıkla")
                    .OnClicked(b => b.Text = $"{++count} kez tıklandı")
                    .CenterHorizontal()
            )
        );
}