Masaüstü Kılavuzu (WPF .NET)

Çözümden bağımsız olan ve modern grafik donanımından yararlanmak için oluşturulmuş vektör tabanlı bir işleme altyapısı kullanan kullanıcı arabirimi çerçevesi olan Windows Presentation Foundation (WPF) Masaüstü Kılavuzu’na hoş geldiniz. WPF; Extensible Application Markup Language (XAML), denetimler, veri bağlama, düzen, 2B ve 3B grafikler, animasyon, stiller, şablonlar, belgeler, medya, metin ve tipografi dahil kapsamlı bir uygulama geliştirme özellikleri kümesi sağlar. WPF, .NET’in bir parçasıdır ve bu sayede .NET API’sinin diğer öğelerini kapsayan uygulamalar oluşturabilirsiniz.

Önemli

.NET 7 ve .NET 6 için Masaüstü Kılavuzu belgeleri yapım aşamasındadır.

WPF’nin iki uygulaması vardır:

  1. .NET sürümü (bu kılavuz):

    .NET üzerinde çalışan, GitHub'da barındırılan bir WPF açık kaynak uygulaması. XAML tasarımcısı için en az Visual Studio 2019 sürüm 16.8 gerekir. Ancak .NET sürümünüze bağlı olarak, Visual Studio'nun daha yeni bir sürümünü kullanmanız gerekebilir.

    .NET platformlar arası bir teknoloji olsa da WPF yalnızca Windows üzerinde çalışır.

  2. .NET Framework 4 sürümü:

    Visual Studio 2019 ve Visual Studio 2017 tarafından desteklenen WPF’nin .NET Framework uygulaması.

    .NET Framework 4, .NET’in yalnızca Windows’da çalışan sürümüdür ve Windows işletim sistemi bileşenlerinden biri olarak kabul edilir. WPF’nin bu sürümü .NET Framework ile dağıtılır. WPF’nin .NET Framework sürümü hakkında daha fazla bilgi için bkz. .NET Framework için WPF’ye giriş.

WPF’nin temel özelliklerinin ve kavramlarının ele alındığı bu genel bakış belgesi yeni başlayanlara yöneliktir. WPF uygulaması oluşturmayı öğrenmek için bkz. Öğretici: Yeni WPF uygulaması oluşturma.

.NET Framework'ten yükseltme neden

Uygulamanızı .NET Framework'ten .NET'e yükseltirken şunlardan yararlanabilirsiniz:

  • Daha iyi performans
  • Yeni .NET API'leri
  • En son dil geliştirmeleri
  • Geliştirilmiş erişilebilirlik ve güvenilirlik
  • Güncelleştirilmiş araçlar ve daha fazlası

Uygulamanızı yükseltmeyi öğrenmek için bkz . WPF masaüstü uygulamasını .NET 7'ye yükseltme.

WPF ile programlama

WPF, çoğunlukla System.Windows ad alanında bulunan .NET türlerinin bir alt kümesi olarak sunulur. Daha önce ASP.NET ve Windows Forms gibi çerçeveleri kullanarak .NET ile uygulamalar derlediyseniz temel WPF programlama deneyimi size tanıdık gelecektir:

  • Sınıfların örneğini oluşturma
  • Özellikleri ayarlama
  • Çağrı yöntemleri
  • Olayları işleme

WPF, özellikleri ve olayları geliştiren daha fazla programlama yapısı içerir: bağımlılık özellikleri ve yönlendirilmiş olaylar.

İşaretleme ve arka plan kod

WPF, ASP.NET geliştiricilerin aşina olması gereken bir deneyim olan işaretleme ve arka plan kod kullanarak uygulama geliştirmenize olanak tanır. Bir uygulamanın davranışını uygulamaya almak için yönetilen programlama dillerini (arka plan kod) kullanırken görünümünü uygulamak için genellikle XAML işaretlemesi kullanırsınız. Bu görünüm ve davranış ayrımı aşağıdaki avantajları sunar:

  • Görünüme özgü işaretleme, davranışa özgü kodla sıkı bir şekilde birleştirilemediği için geliştirme ve bakım maliyetleri azalır.

  • Tasarımcılar, uygulamanın davranışını uygulamaya alan geliştiricilerle aynı anda uygulamanın görünümünü uygulamaya alabildiğinden geliştirme süreci daha verimlidir.

  • WPF uygulamaları için genelleştirme ve yerelleştirme süreçleri basitleştirilmiştir.

Markup

XAML, bir uygulamanın görünümünü bildirim temelli olarak uygulayan XML tabanlı bir işaretleme dilidir. Genellikle pencereleri, iletişim kutularını, sayfaları ve kullanıcı denetimlerini tanımlamak ve bunları denetimler, şekiller ve grafiklerle doldurmak için kullanılır.

Aşağıdaki örnekte XAML kullanılarak tek bir düğme içeren bir pencerenin görünümünü uygulamaya alınmıştır:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    Title="Window with Button"
    Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button">Click Me!</Button>

</Window>

Bu XAML ve Window öğelerini kullanarak Button bir pencere ve düğme tanımlar. Her öğe, pencerenin başlık çubuğu metnini belirtmek için Window öğesinin Title özniteliği gibi özniteliklerle yapılandırılır. Çalışma zamanında WPF, işaretlemede tanımlanan öğeleri ve öznitelikleri WPF sınıflarının örneklerine dönüştürür. Örneğin Window öğesi, Title özelliği Title özniteliğinin değeri olan bir Window sınıfı örneğine dönüştürülür.

Aşağıdaki şekilde yukarıdaki örnekte XAML tarafından tanımlanan kullanıcı arabirimi (UI) gösterilmektedir:

A window that contains a button

XAML, XML tabanlı olduğundan onunla oluşturduğunuz kullanıcı arabirimi öğe ağacı olarak bilinen iç içe geçmiş öğeler hiyerarşisinde bir araya getirilir. Öğe ağacı, kullanıcı arabirimlerini oluşturmak ve yönetmek için mantıksal ve sezgisel bir yöntem sunar.

Arka plan kod

Bir uygulamanın temel davranışı, kullanıcı etkileşimlerine yanıt veren işlevleri uygulamaktır. Örneğin, bir menüye veya düğmeye tıklandığında yanıt olarak iş mantığının ve veri erişim mantığının çağrılmasını sağlar. WPF’de bu davranış, işaretlemeyle ilişkili kodda uygulanır. Bu kod türü, arka plan kod olarak bilinir. Aşağıdaki örnekte yukarıdaki örneğin güncelleştirilmiş işaretlemesi ve arka plan kod gösterilmektedir:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.AWindow"
    Title="Window with Button"
    Width="250" Height="100">

  <!-- Add button to window -->
  <Button Name="button" Click="button_Click">Click Me!</Button>

</Window>

Güncelleştirilmiş işaretleme, xmlns:x ad alanını tanımlar ve arka plan kod türleri için destek ekleyen şemayla eşler. x:Class özniteliği, arka plan kod kullanan bir sınıfı bu belirli XAML işaretlemesiyle ilişkilendirmek için kullanılır. Bu özniteliğin <Window> öğesinde bildirilmiş olması dikkate alındığında, arka plan kod sınıfının, Window sınıfından devralması gerekir.

using System.Windows;

namespace SDKSample
{
    public partial class AWindow : Window
    {
        public AWindow()
        {
            // InitializeComponent call is required to merge the UI
            // that is defined in markup with this class, including  
            // setting properties and registering event handlers
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            // Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!");
        }
    }
}
Namespace SDKSample

    Partial Public Class AWindow
        Inherits System.Windows.Window

        Public Sub New()

            ' InitializeComponent call is required to merge the UI
            ' that is defined in markup with this class, including  
            ' setting properties and registering event handlers
            InitializeComponent()

        End Sub

        Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

            ' Show message box when button is clicked.
            MessageBox.Show("Hello, Windows Presentation Foundation!")

        End Sub

    End Class

End Namespace

InitializeComponent, işaretlemede tanımlanan kullanıcı arabirimini arkadaki kod sınıfıyla birleştirmek için arka plan kod sınıfının oluşturucusundan çağrılır. (InitializeComponent uygulamanız derlendiğinde sizin için oluşturulur ve bu nedenle el ile uygulamanız gerekmez.) x:Class ve InitializeComponent birleşimi, uygulamanızın oluşturulduğunda doğru şekilde başlatıldığından emin olmanızı sağlar.

İşaretlemede <Button> öğesinin Click özniteliği için button_Click değerini tanımladığına dikkat edin. İşaretlemenin ve arka plan kodun başlatılması ve birlikte çalışması sayesinde düğmenin Click olayı otomatik olarak button_Click yöntemine eşlenir. Düğmeye tıklandığında olay işleyicisi çağrılır ve System.Windows.MessageBox.Show yöntemi çağrılarak bir ileti kutusu görüntülenir.

Aşağıdaki şekilde düğmeye tıklandığında elde edilen sonuç gösterilmiştir:

A MessageBox

Giriş ve komutlar

Denetimler çoğunlukla kullanıcı girişini algılar ve uygun yanıtla karşılık verir. WPF giriş sistemi metin girişini, odak yönetimini ve fare konumlandırmayı desteklemek için hem doğrudan hem de yönlendirilmiş olayları kullanır.

Uygulamalar genellikle karmaşık giriş gereksinimlerine sahip olur. WPF, kullanıcı girişi eylemlerini bu eylemlere yanıt veren koddan ayıran bir komut sistemi sunar. Komut sistemi, birden çok kaynağın aynı komut mantığını çağırmasına olanak tanır. Örneğin farklı uygulamalar tarafından kullanılan yaygın düzenleme işlemlerini düşünelim: Kopyala, Kes ve Yapıştır. Bu işlemler, komutlar kullanılarak uygulamaya alındığında farklı kullanıcı eylemleri kullanılarak çağrılabilir.

Denetimler

Uygulama modeli tarafından sunulan kullanıcı deneyimleri, oluşturulmuş denetimlerdir. WPF’de denetim, aşağıdaki özelliklere sahip WPF sınıflarının kategorisi için kullanılan geniş anlamlı bir terimdir:

  • Bir pencerede veya sayfada barındırılır.
  • Kullanıcı arabirimine sahiptir.
  • Bazı davranışları uygulamaya alır.

Daha fazla bilgi için bkz. Denetimler.

İşleve göre WPF denetimleri

Yerleşik WPF denetimleri aşağıda listelenmiştir:

Düzen

Kullanıcı arabirimi oluşturma süreci, denetimlerinizi konuma ve boyuta göre yapılandırarak bir düzen oluşturmayı kapsar. Her türlü düzenin önemli gereksinimlerinden biri, pencere boyutu ve görüntüleme ayarlarındaki değişikliklere uyum sağlamaktır. WPF, bu durumlarda bir düzeni uyarlamak için sizi kod yazmaya zorlamak yerine birinci sınıf, genişletilebilir bir düzen sistemi sunar.

Düzen sisteminin temeli, değişen pencere ve görüntü koşullarına uyum sağlama becerisini artıran göreli konumlandırmadır. Düzen sistemi, düzeni belirlemek için denetimler arasındaki anlaşmayı da yönetir. Anlaşma iki adımlı bir işlemdir. Birinci adımda denetim, üst öğesine kendisi için gerekli olan konumu ve boyutu bildirir. İkinci adımda ise üst öğe, denetime sahip olabileceği alanı bildirir.

Düzen sistemi, temel WPF sınıfları aracılığıyla alt denetimlere sunulur. WPF; kılavuzlar, yığınlama ve yerleştirme gibi yaygın düzenler için birçok farklı düzen denetimi içerir:

  • Canvas: Alt denetimler kendi düzenini sağlar.

  • DockPanel: Alt denetimler panelin kenarlarına hizalanır.

  • Grid: Alt denetimler satırlara ve sütunlara göre konumlandırılır.

  • StackPanel: Alt denetimler dikey veya yatay olarak yığınlanır.

  • VirtualizingStackPanel: Alt denetimler sanallaştırılır ve yatay veya dikey olarak yönlendirilmiş tek bir çizgi üzerinde düzenlenir.

  • WrapPanel: Alt denetimler, geçerli satırda yeterli alan olmadığında soldan sağa sırada konumlandırılır ve bir sonraki satıra kaydırılır.

Aşağıdaki örnekte çeşitli TextBox denetimlerin düzenlenmesi için bir DockPanel kullanılmıştır:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.LayoutWindow"
    Title="Layout with the DockPanel" Height="143" Width="319">
  
  <!--DockPanel to layout four text boxes--> 
  <DockPanel>
    <TextBox DockPanel.Dock="Top">Dock = "Top"</TextBox>
    <TextBox DockPanel.Dock="Bottom">Dock = "Bottom"</TextBox>
    <TextBox DockPanel.Dock="Left">Dock = "Left"</TextBox>
    <TextBox Background="White">This TextBox "fills" the remaining space.</TextBox>
  </DockPanel>

</Window>

DockPanel, alt TextBox denetimlerin bunların nasıl düzenleneceğini bildirmesini sağlar. DockPanel, bunu yapmak için her birinin bir yerleştirme stili belirtmesine izin verme amacıyla alt denetimlerin kullanımına sunulan bir Dock iliştirilmiş özelliği uygular.

Dekont

Alt denetimler tarafından kullanılmak üzere üst denetim tarafından uygulanan özellikler, iliştirilmiş özellik olarak adlandırılan bir WPF yapısıdır.

Aşağıdaki şekilde yukarıdaki örnekte yer alan XAML işaretlemesinin sonucu gösterilmektedir:

DockPanel page

Veri bağlama

Çoğu uygulamanın oluşturulma amacı, kullanıcıların verileri görüntülemesine ve düzenlemesine olanak sağlamaktır. WPF uygulamaları için verileri depolama ve onlara erişme işi, SQL ve Entity Framework Core gibi birçok farklı .NET veri erişim kitaplığı tarafından sağlanmıştır. Verilere erişildikten ve veriler bir uygulamanın yönetilen nesnelerine yüklendikten sonra WPF uygulamaları için işin zor kısmı başlar. Bu süreç temelde bu iki şeyi kapsar:

  1. Yönetilen nesnelerdeki verileri, görüntüleme ve düzenleme amacıyla ilgili denetimlere kopyalama.

  2. Denetimler kullanılarak verilerde yapılan değişikliklerin yönetilen nesnelere geri kopyalandığından emin olma.

WPF, uygulama geliştirme sürecini basitleştirmek için bu adımları otomatik olarak işleyen güçlü bir veri bağlama altyapısı sunar. Veri bağlama altyapısının temel birimi, işi bir denetimi (bağlama hedefi) bir veri nesnesine (bağlama kaynağı) bağlamak olan Binding sınıfıdır. Bu ilişki aşağıdaki şekille gösterilmiştir:

Basic data binding diagram

WPF, bağlamaların doğrudan XAML işaretlemesinde bildirilmesini destekler. Örneğin aşağıdaki XAML kodu, "{Binding ... }" XAML sözdizimini kullanarak TextBox öğesinin Text özelliğini bir nesnenin Name özelliğine bağlar. Burada, Window öğesinin DataContext özelliğine bir Name özelliğiyle ayarlanmış bir veri nesnesi olduğu kabul edilir.

 <Window
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     x:Class="SDKSample.DataBindingWindow">

   <!-- Bind the TextBox to the data source (TextBox.Text to Person.Name) -->
   <TextBox Name="personNameTextBox" Text="{Binding Path=Name}" />

 </Window>

WPF veri bağlama altyapısı bağlamadan fazlasını sağlar ve doğrulama, sıralama, filtreleme ve gruplandırma özellikleri sunar. Ayrıca veri bağlama, bağlı veriler için özel kullanıcı arabirimi oluşturma amacıyla veri şablonlarının kullanılmasını destekler.

Daha fazla bilgi için bkz. Veri bağlamaya genel bakış.

Grafikler ve animasyon

WPF, aşağıdaki avantajları sunan kapsamlı ve esnek bir grafik özellikleri kümesi sağlar:

  • Çözünürlükten ve cihazdan bağımsız grafikler. WPF grafik sistemindeki temel ölçü birimi, bir inçin 1/96’sı olan cihazdan bağımsız pikseldir ve bu da çözünürlükten ve cihazdan bağımsız işleme için bir temel sunar. Her cihazdan bağımsız piksel, üzerinde işlendiği sistemin nokta/inç (dpi) ayarıyla eşleşecek şekilde otomatik olarak ölçeklendirilir.

  • Geliştirilmiş duyarlık. WPF koordinat sistemi, tek duyarlık yerine çift duyarlıklı kayan noktalı sayılarla ölçülür. Dönüştürmeler ve opaklık değerleri de çift duyarlıkla ifade edilir. WPF ayrıca geniş renk gamını (scRGB) destekler ve farklı renk alanlarından girişleri yönetmek için tümleşik destek sunar.

  • Gelişmiş grafik ve animasyon desteği. WPF, animasyon sahnelerini sizin için yöneterek grafik programlamayı basitleştirir. Sahne işleme, işleme döngüleri ve çift doğrusal animasyon ilişkilendirme konusunda endişelenmenize gerek yoktur. WPF buna ek olarak isabet testi desteği ve tam alfa birleştirme desteği sağlar.

  • Donanım hızlandırma. WPF grafik sistemi, CPU kullanımını en aza indirmek için grafik donanımından yararlanır.

2B grafikler

WPF, dikdörtgenler ve elipsler gibi yaygın olarak kullanılan vektörle çizilmiş 2B şekillerden oluşan bir kitaplık sunar. Şekiller yalnızca görüntüleme amaçlı değildir. Bu şekiller, klavye ve fare girişi de dahil olmak üzere denetimlerden beklediğiniz birçok özelliği uygular.

WPF tarafından sağlanan 2B şekiller, standart temel şekil kümesini kapsar. Ancak özelleştirilmiş bir kullanıcı arabiriminin tasarlanmasına yardımcı olmak için özel şekiller oluşturmanız gerekebilir. WPF doğrudan çizilebilen, fırça olarak kullanılabilen veya diğer şekilleri ve denetimleri kırpmak için kullanılabilen özel bir şekil oluşturmaya yönelik geometriler sağlar.

Daha fazla bilgi için bkz. Geometriye genel bakış.

WPF 2B özelliklerinin bir alt kümesi gradyanlar, bit eşlemler, çizimler, videolarla boyama, döndürme, ölçeklendirme ve eğme gibi görsel efektleri kapsar. Bu etkilerin tamamı fırçalarla elde edilir. Aşağıdaki şekilde bazı örnekler gösterilmiştir:

Illustration of different brushes

Daha fazla bilgi için bkz. WFP fırçalarına genel bakış.

3B işleme

WPF ayrıca daha heyecan verici ve ilginç kullanıcı arabirimleri oluşturulmasını sağlamak için 2B grafiklerle tümleştirilen 3B işleme özellikleri sunar. Örneğin aşağıdaki şekilde 3B şekillere işlenen 2B görüntüler gösterilmiştir:

Visual3D sample screen shot

Daha fazla bilgi için bkz. 3B grafiklere genel bakış.

Animasyon

WPF animasyon desteği, ilginç sayfa geçişleri ve daha fazlasını oluşturmak için denetimleri büyütmenizi, sallamanızı, döndürmenizi ve soluklaştırmanızı sağlar. Çoğu WPF sınıfına, hatta özel sınıflara bile animasyon uygulayabilirsiniz. Aşağıdaki şekilde basit bir animasyon gösterilmektedir:

Images of an animated cube

Daha fazla bilgi için bkz. Animasyona genel bakış.

Metin ve tipografi

WPF, yüksek kaliteli metin işleme sağlamak için aşağıdaki özellikleri sunar:

  • OpenType yazı tipi desteği.
  • ClearType geliştirmeleri.
  • Donanım hızlandırma destekli yüksek performans.
  • Metinlerin medya, grafik ve animasyonla tümleştirilmesi.
  • Uluslararası yazı tipi desteği ve geri dönüş mekanizmaları.

Metnin grafiklerle tümleştirmesinin bir gösterimi olarak aşağıdaki şekilde metin süslemelerinin uygulanması gösterilmiştir:

Text with various text decorations

Daha fazla bilgi için bkz. Windows Presentation Foundation’da tipografi.

WPF uygulamalarını özelleştirme

Belgenin bu bölümüne kadar kısımda uygulama geliştirmeye yönelik temel WPF yapı taşlarını gördünüz:

  • Uygulama modeli, çoğunluğunu denetimlerin oluşturduğu uygulama içeriğini barındırmanızı ve teslim etmenizi sağlar.
  • WPF düzen sistemi, kullanıcı arabirimindeki denetimlerin düzenlenmesini basitleştirmenizi sağlar.
  • Veri bağlama, kullanıcı arabiriminizi verilerle tümleştirme işini sadeleştirir.
  • WPF tarafından sağlanan kapsamlı grafik, animasyon ve medya desteği aralığı, uygulamanızın görünümünü geliştirmenizi sağlar.

Ancak temel bilgiler genellikle gerçekten farklı ve görsel açıdan etkileyici bir kullanıcı deneyimi oluşturmak ve yönetmek için yeterli değildir. Standart WPF denetimleri, uygulamanızın istenen görünümüyle tümleştirilmeyebilir. Veriler en etkili şekilde görüntülenmeyebilir. Uygulamanızın genel kullanıcı deneyimi, Windows temalarının varsayılan görünümüne uygun olmayabilir.

Bu nedenle WPF, benzersiz kullanıcı deneyimleri oluşturmanızı sağlayan çeşitli mekanizmalar sunar.

İçerik Modeli

WPF denetimlerinin çoğunun temel amacı içerik görüntülemektir. WPF’de, denetimin içeriğini oluşturabilecek öğelerin türü ve sayısı, denetimin içerik modeli olarak bilinir. Bazı denetimler tek bir öğe ve içerik türü içerebilir. Örneğin, TextBox öğesinin içeriği, Text özelliğine atanmış bir dize değeridir.

Ancak diğer denetimler farklı içerik türlerine ait birden çok öğe içerebilir. Content özelliğiyle belirtilen Button içeriği; düzen denetimleri, metin, resimler ve şekiller gibi çeşitli öğeler içerebilir.

Çeşitli denetimler tarafından desteklenen içerik türleri hakkında daha fazla bilgi için bkz. WPF içerik modeli.

Tetikleyiciler

XAML işaretlemesinin temel amacı bir uygulamanın görünümünü uygulamak olsa da XAML ile uygulamanın davranışının bazı yönlerini de uygulamaya alabilirsiniz. Örneğin tetikleyicileri kullanarak bir uygulamanın görünümünü kullanıcı etkileşimlerine göre değiştirebilirsiniz. Daha fazla bilgi için bkz. Stiller ve şablonlar.

Şablonlar

WPF denetimleri için varsayılan kullanıcı arabirimleri genellikle diğer denetimlerden ve şekillerden oluşturulur. Örneğin Button, hem ButtonChrome hem de ContentPresenter denetimlerinden oluşur. ButtonChrome standart düğme görünümünü sağlarken ContentPresenter, Content özelliği tarafından belirtildiği gibi düğmenin içeriğini görüntüler.

Bazen bir denetimin varsayılan görünümü, uygulamanın genel görünümüyle çakışabilir. Bu durumda, denetimin içeriğini ve davranışını değiştirmeden kullanıcı arabiriminin görünümünü değiştirmek için bir ControlTemplate kullanabilirsiniz.

Örneğin Button, tıklandığında bir Click olayı oluşturur. Bir düğmenin şablonunu bir Ellipse şekli görüntüleyecek şekilde değiştirdiğinizde denetimin yönünün görseli değişir ancak işlevi değişmez. Bu durumda da denetimin görsel öğesine tıklayabilirsiniz ve Click olayı beklendiği gibi tetiklenir.

An elliptical button and a second window

Veri şablonları

Denetim şablonu denetimin görünümünü belirtmenize olanak sağlarken, veri şablonu denetimin içeriğinin görünümünü belirtmenize olanak tanır. Veri şablonları sıklıkla bağlı verilerin görüntülenme biçimini geliştirmek için kullanılır. Aşağıdaki şekilde, her görevin bir ada, açıklamaya ve önceliğe sahip olduğu bir ListBox nesnesi koleksiyonuna bağlı olan varsayılan Task görünümü gösterilmektedir:

A list box with the default appearance

Varsayılan görünüm, ListBox denetiminden beklenen görünümdür. Ancak her görevin varsayılan görünümü yalnızca görev adını içerir. Görev adını, açıklamasını ve önceliğini göstermek için ListBox denetimin ilişkili liste öğelerinin varsayılan görünümü DataTemplate kullanılarak değiştirilmelidir. Aşağıda Task nesnesi için oluşturulmuş bir veri şablonu uygulama örneği verilmiştir.

List box that uses a data template

ListBox davranışını ve genel görünümünü korur ve yalnızca liste kutusu tarafından görüntülenen içeriğin görünümü değişir.

Daha fazla bilgi için bkz. Veri şablonu oluşturmaya genel bakış.

Stiller

Stiller, geliştiricilerin ve tasarımcıların ürünleri için belirli bir görünümü standartlaştırmasına olanak tanır. WPF, temeli Style öğesi olan güçlü bir stil modeli sunar. Stiller, türlere özellik değerleri uygulayabilir. Başvurulduğunda türe veya tek nesnelere göre her şeye otomatik olarak uygulanabilirler. Aşağıdaki örnek, penceredeki her Button için arka plan rengini Orange olarak ayarlayan bir stil oluşturur:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.StyleWindow"
    Title="Styles">

    <Window.Resources>
        <!-- Style that will be applied to all buttons for this window -->
        <Style TargetType="{x:Type Button}">
            <Setter Property="Background" Value="Orange" />
            <Setter Property="BorderBrush" Value="Crimson" />
            <Setter Property="FontSize" Value="20" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="Margin" Value="5" />
        </Style>
    </Window.Resources>
    <StackPanel>

        <!-- This button will have the style applied to it -->
        <Button>Click Me!</Button>

        <!-- This label will not have the style applied to it -->
        <Label>Don't Click Me!</Label>

        <!-- This button will have the style applied to it -->
        <Button>Click Me!</Button>
        
    </StackPanel>
</Window>

Bu stil tüm Button denetimlerini hedeflediğinden, stil aşağıdaki şekilde gösterildiği gibi penceredeki tüm düğmelere otomatik olarak uygulanır:

Two orange buttons

Daha fazla bilgi için bkz. Stiller ve şablonlar.

Kaynaklar

Bir uygulamadaki denetimler; şablonları, veri şablonlarını ve stilleri denetlemek için yazı tiplerinden arka plan renklerine kadar her şeyi içerebilen aynı görünümü paylaşmalıdır. WPF’nin kullanıcı arabirimi kaynakları desteğini kullanarak bu kaynakları yeniden kullanmak üzere tek bir konumda kapsülleyebilirsiniz.

Aşağıdaki örnek, Button ile Label tarafından paylaşılan ortak bir arka plan rengini tanımlar:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.ResourcesWindow"
    Title="Resources Window">

  <!-- Define window-scoped background color resource -->
  <Window.Resources>
    <SolidColorBrush x:Key="defaultBackground" Color="Red" />
  </Window.Resources>

  <!-- Button background is defined by window-scoped resource -->
  <Button Background="{StaticResource defaultBackground}">One Button</Button>

  <!-- Label background is defined by window-scoped resource -->
  <Label Background="{StaticResource defaultBackground}">One Label</Label>
</Window>

Daha fazla bilgi için bkz. WPF kaynağını tanımlama ve başvurma.

Özel denetimler

WPF özelleştirme desteği konağı sağlasa da mevcut WPF denetimlerinin uygulamanızın veya kullanıcılarının gereksinimlerini karşılamadığı durumlarla karşılaşabilirsiniz. Bu durum şu şartlarda oluşabilir:

  • İhtiyacınız olan kullanıcı arabirimini, mevcut WPF uygulamalarının görünümünü özelleştirerek oluşturamadığınızda.
  • İhtiyacınız olan davranış, mevcut WPF uygulamaları tarafından (kolayca) desteklenmediğinde.

Ancak bu noktada yeni bir denetim oluşturmak için üç WPF modelinin birinden faydalanabilirsiniz. Her model belirli bir senaryoya yönelik olarak tasarlanmıştır ve özel denetiminizin belirli bir WPF temel sınıfından türetilmiş olmasını gerektirir. Üç model aşağıda listelenmiştir:

  • Kullanıcı Denetim Modeli
    UserControl kaynağından bir özel denetim türetilir ve bu denetim, bir veya daha fazla denetimden oluşur.

  • Denetim Modeli Özel denetim, Control kaynağından türetilir ve çoğu WPF denetimine benzer şekilde şablonları kullanarak davranışlarını görünümlerinden ayıran uygulamalar oluşturmak için kullanılır. Control kaynağından türetilmiş olması, kullanıcı denetimlerine kıyasla daha fazla özel kullanıcı arabirimi oluşturma özgürlüğü sağlar ancak daha fazla çaba gerektirebilir.

  • Çerçeve Öğesi Modeli.
    FrameworkElement kaynağından bir özel denetim türetilir ve görünümü özel işleme mantığı tarafından (şablonlar tarafından değil) tanımlanır.

Özel denetimler hakkında daha fazla bilgi için bkz. Denetim oluşturmaya genel bakış.

Ayrıca bkz.