Windows Presentation Foundation (WPF)
-
27 Haziran 2011 Pazartesi 13:09
- WPF'e Giriş
- WPF ile Programlama
- İşaretleme ve Kod-Arkası
- İşaretleme
- Kod-Arkası
- Uygulamalar
- Kontroller
- Kontroller 2
- Veri Bağlama
- Grafikler
- Animasyonlar
- Medya
- Metin ve Tipografi
- Belgeler
- WPF Uygulamalarını Özelleştirme
- WPF Uygulamalarını Özelleştirme 2
- Stiller
- Kaynaklar (Resources)
- Temalar ve Dış Görünümler
- Özel Denetimler
Windows Presentation Foundation (WPF); görsel olarak çekici kullanıcı deneyimleri ile Windows kullanıcı uygulamaları için yeni nesil bir sunuş sistemidir. WPF ile her ikiside bağımsız ve tarayıcı tabanlı geniş uygulamalar oluşturabilirsiniz. Bir örnek olarak Contoso Sağlık Örnek Uygulaması (Contoso Healthcare Sample Application) aşağıdaki şekide görülmekledir.

WPF’in çekirdeği modern grafik donanımından yararlanmak için kurulmuş bir çözünürlükten bağımsız ve vektör tabanlı yorum motorudur. WPF, Extensible Application Markup Language (XAML), kontroller, veri bağlama, düzen, 2D ve 3D grafikler, stiller, temalar, dosyalar, medya, yazı ve tipografi içeren uygulama geliştirme özellikleri kapsamlı bir dizi çekirdek uzatır. WPF Microsoft. NET Framework’e dahildir, yani .NET sınıf kütüphanesinin diğer elemanlarıyla birleşik uygulamalar geliştirebilirsiniz.
Bu bakış yeni başlayanlar için tasarlanmıştır ve önemli yetenekleri ve WPF kavramlarını kapsar. Bir WPF incelemesi isteyen deneyimli WPF geliştiricileri için de bu bakış yararlı olabilir.
- Düzenleyen Emre GunerturkModerator 01 Ağustos 2011 Pazartesi 08:41 Anchor
- Düzenleyen Emre GunerturkModerator 01 Ağustos 2011 Pazartesi 09:54 Anchor2
- Taşıyan Emre GunerturkModerator 16 Mart 2012 Cuma 09:17 (Gönderen:Windows Presentation Foundation)
Tüm Yanıtlar
-
27 Haziran 2011 Pazartesi 13:10
WPF, .NET Framework türlerinden bir System.Windows namespace alt kümesi olarak bulunmaktadır. Eğer daha önce oluşturduğunuz uygulamalar ASP.NET ve Windows Forms gibi .NET Framework tarafından yönetilen teknolojiler ise, örneğin kullandığınız gözde .NET Framework programlama dillerinden c# veya Visual Basic ile kullandığınız sınıflar, özellikleri ayarlama, metodları çağırma, ve olayları yakalama gibi işlemler den dolayı, temel WPF programlama deneyimine zaten aşina sayılırsınız.
Bağzı daha güçlü WPF yeteneklerini desteklemek ve programlama deneyimini basitleştirmek için, WPF özelliklerini ve olaylarını geliştirmek ek programlama yapıları içerir, bunlar: bağımlılık özellikleri ve Gönderilmiş Olaylardır. Bağımlılık özellikleri hakkında daha fazla bilgi için Dependency Properties Overview, Gönderilmiş Olaylar ilgili daha fazla bilgi için Routed Events Overview bölümlerini inceleye bilirsiniz.
- Düzenleyen Emre GunerturkModerator 01 Ağustos 2011 Pazartesi 08:45 Anchor
- Düzenleyen Emre GunerturkModerator 01 Ağustos 2011 Pazartesi 08:49 test
-
27 Haziran 2011 Pazartesi 13:11
İşaretleme ve Kod-Arkası
WPF Windows istemci uygulama geliştirme için ek programlama geliştirmeleri sunuyor. Bir açık geliştirme biçimlendirme ve kod arkasında, ASP.NET geliştiricilerin aşina olması gereken bir deneyim ve kullanan bir uygulama geliştirme yeteneğidir. Genellikle kullanımda hayata geçirilen programlama dilleri (kod-arkası) kullanılırken bir program görünümünü uygulamak için(XAML) biçimlendirme kullanılır. Bu bölünmenin faydaları aşağıdaki gibidir:
· Geliştirme ve bakım maliteyleri azaltılmıştır çünkü görünüm-özel işaretlemenin (XAML) davranışa özel kodla sıkı birbağı yoktur.
· Tasarımcılar uygulamanın davranışını uygulama geliştiriciler ile aynı anda bir uygulamanın görünümünü uygulayabilir çünkü Geliştirme daha etkilidir.
· Birden tasarım araçları XAML biçimlendirme uygulamak ve paylaşmak için kullanılabilir, uygulama geliştirmedeki katılımın hedef gereksinimlerinde; Visual Studio hedefli geliştiricilere ve tasarımcılara Microsoft Expression Blend uygun bir deneyim sunar .
· WPF uygulamaları için Küreselleşme ve yerelleşme büyük ölçüde basitleştirilmiştir (İlgili olarak WPF Globalization and Localization Overview’i inceleye bilirsiniz ).
Aşağıdaki WPF biçimlendirme ve kod arkasına kısa bir giriştir.
-
27 Haziran 2011 Pazartesi 13:14
İşaretleme
XAML bildirimli bir uygulamanın görünümünü uygulamak için kullanılan XML tabanlı bir işaretleme dilidir. Genellikle pencereler, iletişim kutuları, sayfaları ve kullanıcı denetimleri oluşturmak ve denetimler, şekiller ve grafikler ile doldurmak için kullanılır.
Aşağıdaki örnek, tek bir düğme içeren bir pencere görünümünü uygulamak için XAML kullanır.
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="124" Width="208">
<!—Pencereye Buton Ekle -->
<Button Name="button">Bana Tıkla!</Button>
</Window>
Özellikle, bu XAML sırasıyla, bir pencere ve Button öğeleri kullanarak bir düğme tanımlar. Her bir eleman gibi pencerenin başlık çubuğu metnini belirtmek için Pencere elemanın adı niteliği gibi özellikleri ile yapılandırılmıştır. Çalışma zamanında WPF sınıfların örneklerine biçimlendirme tanımlanır öğeleri ve öznitelikleri dönüştürülür.
Aşağıdaki resimde önceki örnekteki XAML tarafından tanımlanan kullanıcı arabirimi (UI)’dir.

XAML XML tabanlı olduğundan, onunla oluşturan bu UI bir eleman ağacı olarak bilinen iç içe geçmiş öğeleri bir hiyerarşi içinde monte edilir.Eleman ağacı UI oluşturmak ve yönetmek için mantıksal ve sezgisel bir yol sağlar.
-
27 Haziran 2011 Pazartesi 13:19
Kod-Arkası
Bir uygulamanın ana davranış (bir menü, araç çubuğu veya butonuna tıklayarak, örneğin) ve tepki olarak iş mantığı ve veri erişim mantığı arama taşıma olayları dahil olmak üzere kullanıcı etkileşimlerini, yanıt işlevi uygulamaktır. WPF, bu davranış ile genellikle biçimlendirme ile ilişkili kod uygulanmaktadır. Kodun bu tipi arka planda kodlama olarak da bilinir.Aşağıdaki örnek kod arkasında ve önceki örnekte güncellenmiş biçimlendirme gösterir.
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="124" Width="208">
<!—Pencereye Buton Ekle -->
<Button Name="button" Click="button_Click"> Bana Tıkla!</Button>
</Window>
C#
using System.Windows;
namespace SDKSample
{
public partial class AWindow : Window
{
public AWindow()
{
InitializeComponent();
}
void button_Click(object sender, RoutedEventArgs e)
{
// butona tıklandığında mesaj kutusu göster
MessageBox.Show("Merhaba, Windows Presentation Foundation!");
}
}
}
VB
Namespace SDKSample
Partial Public Class AWindow
Inherits System.Windows.Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' butona tıklandığında mesaj kutusu göster
MessageBox.Show("Merkaba, Windows Presentation Foundation!")
End Sub
End Class
End Namespace
Bu örnekte, arka plandaki kodlama Pencere sınıfından türetilmiş bir sınıf uygular. X: Sınıf özniteliği sınıf arka planda kodlama ile biçimlendirme ile ilişkilendirmek için kullanılır. Initializecomponent sınıfı arka planda kodlama ile biçimlendirmede tanımlanan UI ile birleştirmek için arka planda kodlama sınıfının yapıcısı olarak çağrılır.(InitializeComponent uygulamanızı yapılandırdığınız (Built) zaman oluşturulur, el ile uygulama gerektirmez.)
X kombinasyonu: Sınıf ve ınitializecomponent oluşturulduğu zaman, uygulamanızın doğru başlatıldığından emin olmanızı sağlar.
Aşağıdaki resimde butona tıklandığında ekranınıza gelecek olan mesaj kutusunu gösterir.

-
28 Haziran 2011 Salı 07:13
Uygulamalar
. NET Framework, System.Windows ve biçimlendirme ve kod-arkasında, WPF uygulama geliştirme deneyimi temelini oluşturmaktadır. Ayrıca WPF zengin içeriği ile kullanıcı deneyimleri oluşturmak için kapsamlı özelliklere sahiptir. Bu içerik paketi ve kullanıcılara teslim edilecek "uygulamalar," WPF türleri ve toplu uygulama modeli olarak bilinerek hizmet vermektedir.
Bağımsız Uygulamalar
Bağımsız uygulamalar için, windows ve menü çubukları, araç çubukları, erişilen iletişim kutuları vs. oluşturmak için pencere sınıfını kullanabilirsiniz.

Ayrıca, aşağıdaki WPF iletişim kutularını kullanabilirsiniz: MessageBox, OpenFileDialog, SaveFileDialog, ve PrintDialog.
Tarayıcı Tabanlı Uygulamalar
Tarayıcı tabanlı uygulamalar için, XAML tarayıcı uygulamaları (XBAP) olarak bilinen, sayfalar (sayfa) ve köprüler (Köprü sınıfları) ile arasında gezinebilirsiniz ve sayfa işlevleri (PageFunction (T)) oluşturabilirsiniz. Aşağıdaki şekilde Internet Explorer 7'de barındırılan bir XBAP bir sayfa gösterir.

WPF uygulamaları Microsoft Internet Explorer 6 ve Internet Explorer 7 barındırılabilir. WPF birbirini izleyen iki navigasyon barındırma seçeneği sunar.
· Çerçeve, sayfa veya pencereler içinde yönlendirile bilir içeriğin ana adaları.
· NavigationWindow, Bütün bir pencerenin içinde yönlendirile bilir içerik barındırma.
Uygulama Sınıfı
XBAP'ler, uygulamalar ve her ikisi de genellikle başlangıç ve yaşam boyu yönetimi de dahil olmak üzere ek uygulama kapsamlı hizmetleri, ortak özellikleri, ve paylaşılan kaynakları gerektirecek kadar karmaşık. Uygulama sınıfı bağzı servisleri ve daha fazlasını kapsüller, ve XAML kullanılarak uygulana bilir, aşağıda görünen ilgili bir örnek verilmiştir.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="MainWindow.xaml" />
Bu işaretlemeye tek başına bir uygulama için uygulama tanımı ve uygulaması başlatıldığında otomatik olarak MainWindow açan bir uygulama nesnesi oluşturmak için WPF bildirir.
Uygulama ile ilgili anlamak için önemli bir kavram da tek başına ve tarayıcı barındırılan uygulamalar için destek ortak bir platform yaratmaktadır. Örneğin, önceki XAML aşağıdaki örnekte görüldüğü gibi bir XBAP, başlatıldığında otomatik olarak bir sayfaya gitmek için bir tarayıcı barındırılan uygulama tarafından kullanılabilir.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="HomePage.xaml" />
Güvenlik
XBAP'ler bir tarayıcıda barındırılması, güvenlik için önemlidir. Özellikle bir kısmi “kısmi güven” güvenli sanal XBAP html tabanlı uygulamalar üzerinde uygulanan kısıtlamalar eşit veya kısıtlamaları zorlamak için kullanılır.
Ayrıca, her HTML özellik güvenliği XBOPlar tarafından çalıştırılıp kısmi güvenlik tarafından kapsamlı güvenlik süreci kullanılarak denetlenip, WPF Güvenlik Stratejisi - Güvenlik Mühendisliği kulanılarak sağlanırç
WPF Kısmi Güven Güvenlik açıklandığı gibi hala, WPF özellikleri çoğunluğu güvenli bir şekilde, XBAP'ler den çalıştırılabilir. -
28 Haziran 2011 Salı 16:36
Kontroller
Uygulama modeli tarafından sunulan kullanıcı deneyimleri, yapılandırılmış denetimlerdir.WPF'te "denetim", bir pencere veya sayfa içinde tutulan, kullanıcı arabirimi (UI) olan, bazı davranışı uygulayan WPF sınıflarının bir kategorisine uygulanan kapsayıcı terimdir.
Daha fazla bilgi için burayı inceleye bilirsiniz: Denetimlere Genel Bakış.
· Düğmeler: Button ve RepeatButton.
· İletişim KutularıOpenFileDialog, PrintDialog ve SaveFileDialog.
· Dijital Mürekkep: InkCanvas ve InkPresenter.
· Belgeler: DocumentViewer, FlowDocumentPageViewer, FlowDocumentReader, FlowDocumentScrollViewer, ve StickyNoteControl.
· Giriş: TextBox, RichTextBox ve PasswordBox.
· Düzen: Border, BulletDecorator, Canvas, DockPanel, Expander, Grid, GridView, GridSplitter, GroupBox, Panel, ResizeGrip, Separator, ScrollBar, ScrollViewer, StackPanel, Thumb, Viewbox, VirtualizingStackPanel, Window ve WrapPanel.
· Ortam: Image, MediaElement ve SoundPlayerAction.
· Menüler: ContextMenu, Menu ve ToolBar.
· GezinmeFrame, Hyperlink, Page, NavigationWindow, ve TabControl.
· Seçim: CheckBox, ComboBox, ListBox, TreeView ve RadioButton, Slider.
· Kullanıcı Bilgileri: AccessText, Label, Popup, ProgressBar, StatusBar, TextBlock ve ToolTip.
Giriş ve Kumanda (Komut Verme)
Denetimler, kullanıcı girişini çok sık bir şekilde algılar ve buna yanıt verir.WPF giriş sistemi, metin girişi, odak yönetimi ve fare konumlandırmasını desteklemek için doğrudan ve yönlendirilmiş olayların ikisini de kullanır.Daha fazla bilgi için bkz: Genel Giriş.
Uygulamalar genellikle karmaşık giriş gereksinimlerine sahiptir.WPF, kullanıcı giriş eylemlerini, onlara cevap veren koddan ayıran komut sistemi sağlar.Daha fazla bilgi için inceleyiniz: Komut Verme Genel Başış.
Düzen
Bir UI oluşturduğunuzda, kontrolünüzün konum ve boyut düzenini ayarlarsınız. Herhangi bir düzenin anahtar gereksinimi, pencere boyutu ve görüntü ayarlarında yapılan değişiklere uyum sağlamaktır. Bu durumlarda düzene uyum sağlamak için sizi kod yazmaya zorlamak yerine, WPF, sizin için birinci sınıf, genişletilebilir bir düzen sistemi sağlar.
Düzen sisteminin dönüm noktası, pencere ve görüntü durumlarının değişimine uyum sağlayabilme yeteneğini artıran göreli konumlandırmadır.Buna ek olarak, düzen sistemi, düzeni belirlemek için kontroller arasındaki anlaşmayı yönetir.Anlaşma iki adımlı bir işlemdir: öncelikle, bir kontrol, üstüne hangi konumun ve boyutun gerektiğini söyler; ikinci olarak, üstü, kontrole ne kadar yere sahip olabileceğini söyler.
· Canvas: Alt kontroller kendi düzenini sağlar.
· DockPanel: Alt kontroller panel kenarlarına hizalanır.
· Grid: Alt kontroller satır ve sütunlar tarafından konumlandırılır.
· StackPanel: Alt kontroller dikey veya yatay olarak yığılır.
· VirtualizingStackPanel: Alt kontroller sanallaştırılır ve yatay veya dikey olarak yönlendirilen tek bir çizgi üzerinde düzenlenir.
· WrapPanel: Alt kontroller soldan sağa düzeninde konumlandırılır ve geçerli çizgi üzerinde alanın izin verdiğinden daha fazla kontrol olduğunda sonraki çizgiye kaydırılır.
Aşağıdaki örnekte, birkaç TextBox kontrolünü düzenlemek için DockPanel kullanılmaktadır.
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="124" Width="323">
<!--Dört TextBox'ı konumlandırmak için kullanılan DockPanel-->
<DockPanel>
<TextBox DockPanel.Dock="Top">Hizala = "Üst"</TextBox>
<TextBox DockPanel.Dock="Bottom">Hizala = "Alt"</TextBox>
<TextBox DockPanel.Dock="Left">Hizala = "Sol"</TextBox>
<TextBox Background="White">Bu TextBox Kalan Boş Alanı "Doldurur".</TextBox>
</DockPanel>
</Window>
DockPanel, alt TextBox kontrollerine, nasıl düzenleneceklerini anlatmak için izin verir.Bunu yapmak için, DockPanel, alt kontrollere açıkça görüntülenen Dock özelliğini, nokta stilini belirlemede her birine izin verecek şekilde uygular.
Not: Alt denetimlerin kullanması için üst denetimler tarafından uygulanan bir özellik, ekli özellik olarak adlandırılan bir WPF yapısıdır (bkz: Ekli Özelliklere Genel Bakış).
Aşağıdaki şekil, önceki örnekteki XAML biçimlendirmesinin sonucunu gösterir.

Aşağıda Diğer Düzen kontolleri ile ilgili açıklama örnekleri göre bilirsiniz;
Canvas:
Canvasların görevleri kendi boyutlarına sahip olup, içinde bulunan nesneleri soldan ve yukarıdan hizalamaktır, ve içinde bulunan nesneler bulundukları alanın özelliklerine sahip olurlar.
Canvas oluşrururken eğer başka bir düzen kontrolünün içine değil de pencerenin içine oluşrurursanız; canvas kontrolü pozisyon olarak pencerenin ortasına otomatik olarak yerleştirilir ve başka bir pozisyona taşınamaz, pencere içinde oluşturulan canvas sadece boyutlandırmaya elverişlidir, eğer pencerede oluşturulmuş başka bir düzen kontrolünün içine bir canvas eklerseniz örneğin bir Grid, Canvasa istediğiniz gibi pozisyon ve boyut vere bilirsiniz. Canvas kontrolünün en önemli özelliklerinden biri ise içine oluşturduğunuz nesnenin boyutuyla ilgilenmez, örneğin Canvas içinde bir resim kontrolü olduğunu var sayarsak, resimin boyutu canvasın boyutundan daha büyük olabilir.
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="245" Width="323">
<Grid Height="211" Name="grid1" Width="304">
<Canvas Background="#FF7BDAF5" Height="151" Margin="31,12,219,48" Name="canvas1" Width="223">
<Button Canvas.Left="6" Canvas.Top="122" Content="Button" Height="23" Name="button1" Width="75" />
</Canvas>
</Grid>
</Window>

Resimde görünen mavi arkaplanlı bir Canvas ve içine bir buton kontrolü oluşturduk, seçili duruma getirilmiş butonun özellikler (Properties) kısmı resmin sağ tarafında görülmektedir, daha önce bahsettiğim canvas içindeki kontroller soldan ve yukarıdan hizalanır kuralının değerleri özellikler kısmından Canvas.Left (Sol kısım aralık değeri) ve Canvas.Top (Üst kısım değeri) belirtilir.
-
28 Haziran 2011 Salı 16:37
Grid:
Grid kontrolü Düzen kontrollerinden en önemli olanıdır, tasarımda çösünürlük ile sorunlar yaşamak isatemiyorsak Grid kullanımı en doğrusu olacaktır, zaten WPF siz bir pencere oluşturduğunuz zaman otomatik olarak pencere içine yerleştirilmiş bir Grid kontrolü oluşturur. Gridin en tanıdık özelliklerinden biri ise HTML den bildiğimiz table gibi satır ve sütun oluşturmaya elverişli olmasıdır, bu sayede aslında hazırlayacağınız pencere içeriğinin en temel yerleşim planını da oluşturmuş sayılırsınız. Diğer düzen kontrollerine nazaran Grid kontrolünün yine en önemli özelliklerinden biri, oluşturulan yerin sağ, sol, alt ve üst sınıtlarına göre istediğiniz boyutta pozisyon ataya bilirsiniz, bir örnek ile gösterecek olursak;
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="294" Width="395">
<Grid Height="211" Name="grid1" Margin="0,22.5,2,22.5">
<Grid Margin="25,17,58,12" Background="#FF98C7E5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.146*"/>
<ColumnDefinition Width="0.167*"/>
<ColumnDefinition Width="0.149*"/>
<ColumnDefinition Width="0.176*"/>
<ColumnDefinition Width="0.164*"/>
<ColumnDefinition Width="0.198*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.15*"/>
<RowDefinition Height="0.227*"/>
<RowDefinition Height="0.623*"/>
</Grid.RowDefinitions>
</Grid>
</Grid>
</Window>

Resimde ve XAML kodunda gördüğünüz üzere istediğim pozisyonda bir grid oluşturdum, bu Grid’e de 5 sütun ve 2 satır ekledim, Bu sütun ve satırları Visual Studio tasarım ekranındayken gridin üst ve sol kısımlarına istediğiniz arlıklarda tıklayarak veya XAML kısmından <Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
....
</Grid.ColumnDefinitions> ile sütun,
<Grid. RowDefinition >
< RowDefinition Width="*"/>
....
</Grid. RowDefinition > ile satır,
Kodları ile oluştura bilirsiniz.
. Özellikler kısmında Margin (Kenar Uzaklığı) özelliği aldında virgüller ile ayrılmış 4 adet rakam bloğu bulunmaktadır, bu rakamlardan ilki sol kenardan olan uzaklığı, ikincisi üst kenadrdan olan ozaklığı, üçüncüsü sağ kenadrdan olan ozaklığı ve dördüncüsü alt kenadrdan olan ozaklığı pixel değerinde uygular.
StackPanel :
StackPanel kontrolü kendi yerleşim düzeni olarak Grid ile aynı özelliklere sahiptir, fakat; StackPanel içine eklenen kontrollere pozisyon verilemez, bu kontroller dikey veya yatay olarak ardarda otomatik olarak sıralanır, örneği aşağıda göreibilirsiniz;

<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="294" Width="395">
<Grid Height="211" Name="grid1" Margin="0,22.5,2,22.5">
<StackPanel Margin="39,27.5,175,39.5" Background="#FF97F1F7">
<Button Content="Button"/>
<Button Content="Button"/>
<Button Content="Button"/>
<Button Content="Button"/>
</StackPanel>
</Grid>
</Window>
WrapPanel :
WrapPanel yine StackPanel gibi Gridin yerleşim düzeniyle aynı özelliklere sahiptir, WrapPanelin kendi özelliği ise içine eklenen kontrolleri sol üstten başlayarak sağa doğru sıralar ve kontroller WrapPanel’in sağ kenarına ulaştığında alt satır açılmış gibi davranır ve yine alt sol taraftan başlayarak sıralamaya devam eder. Örneği aşağıda göreibilirsiniz;
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="294" Width="395">
<Grid Height="211" Name="grid1" Margin="0,22.5,2,22.5">
<WrapPanel Margin="28,24.5,115,34.5" Background="#FFA9D3E9">
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
<Button Content="Button" Width="75"/>
</WrapPanel>
</Grid>
</Window>
-
29 Haziran 2011 Çarşamba 07:37
Veri Bağlama
Çoğu uygulama, verileri görüntüleme ve düzenlemede kullanıcılara araçlar sağlamak için oluşturulur.WPF uygulamaları için, saklama ve verilere erişim işi zaten Microsoft SQL Server ve ADO.NET gibi teknolojiler tarafından sağlanır.Verilere erişildikten ve bu veriler uygulamanın yönetilen nesneleri içine yüklendikten sonra, WPF uygulamaları için asıl zor iş başlar.Aslında, iş bu iki şeyi içerir:
1. Verileri yönetilen nesnelerden, görüntülenebildikleri ve düzenlenebildikleri denetimlere kopyalama.
2. Denetimler kullanılarak verilerde yapılan değişikliklerin, yönetilen nesnelere geri kopyalandığından emin olma.
Uygulama geliştirmeyi basitleştirmek için, WPF, bu adımları otomatik olarak gerçekleştiren veri bağlama alt yapısını sağlar. Veri bağlama alt yapısının çekirdek birimi, işi bir denetimi (bağlama hedefi) veri nesnesine (bağlama kaynağı) bağlamak olan Binding sınıfıdır.Bu ilişki aşağıdaki şekilde gösterilmiştir.

Aşağıdaki örnekte, TextBox'ın özel bir Kişi nesnesinin örneğine nasıl bağlandığı gösterilmiştir.Kişi uygulaması aşağıdaki kodda gösterilir.
C#
namespace SDKSample
{
class Kisi
{
string name = "İsim Yok";
public string Name
{
get { return name; }
set { name = value; }
}
}
}
VB
Namespace SDKSample
Class Kisi
Private _isim As String = "İsim Yok"
Public Property Isim() As String
Get
Return _isim
End Get
Set(ByVal value As String)
_isim = value
End Set
End Property
End Class
End Namespace
Aşağıdaki biçimlendirme, TextBox'ı, özel Kişi nesnesinin örneğine bağlar.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.DataBindingWindow">
...
<!—TextBox’ı veri kaynağına bağlar(TextBox.Text’ı Person.Isim’e) -->
<TextBox Name="kisiAdiTextBox" Text="{Binding Path=Isim}" />
...
</Window>
C#
using System.Windows; // Pencere
namespace SDKSample
{
public partial class DataBindingWindow : Window
{
public DataBindingWindow()
{
InitializeComponent();
// Kişi veri kaynağını oluştur
Person person = new Kisi();
// Veri kaynağını bağlantı için hazır hale getir
this.DataContext = kisi;
}
}
}
VB
Imports System.Windows ' Pencere
Namespace SDKSample
Partial Public Class DataBindingWindow
Inherits Window
Public Sub New()
InitializeComponent()
' Kişi veri kaynağını oluştur
Dim kisi As Kisi = New Kisi()
' Veri kaynağını bağlantı için hazır hale getir
Me.DataContext = kisi
End Sub
End Class
End Namespace
Bu örnekte, Kişi sınıfının örneği arka plan kodu içinde oluşturulur ve DataBindingWindow'un veri içeriği olarak ayarlanır.Biçimlendirme içinde, TextBox'ın Text özelliği Kisi.Name özelliğine bağlanır ("{Binding ... }" XAML sözdizimi kullanılarak).Bu XAML, WPF'e, TextBox denetimini pencerenin DataContext özelliği içinde saklanan Kisi nesnesine bağlamasını söyler.
WPF veri bağlama alt yapısı, doğrulama, sıralama, süzme ve gruplandırma içeren ek desteği sağlar.Ayrıca, veri bağlama, standart WPF denetimleri tarafından görüntülenen UI uygun olmadığında, bağlı veriler için özel UI oluşturmada veri şablonları kullanımını destekler.
-
04 Temmuz 2011 Pazartesi 08:43
Grafikler
WPF, aşağıda belirtilen yararları olan kapsamlı, ölçeklenebilir ve esnek bir grafik özellikleri kümesi sağlar:
· Çözünürlük ve aygıttan bağımsız grafikler.WPF grafik sistemi içindeki ölçüm temel birimi, gerçek ekran çözünürlüğüne bakılmaksızın, bir incin 1/96'sı olan aygıttan bağımsız pikseldir ve çözünürlük ve aygıttan bağımsız işlemenin temelini sağlar.Her aygıttan bağımsız piksel, üzerinde işlediği sistemin nokta/inç (dpi) ayarının eşleşmesini otomatik olarak ölçeklendirir.
· Geliştirilmiş duyarlık.WPF koordinat sistemi, tek duyarlıklı yerine çift duyarlıklı kayan nokta sayıları ile ölçülür.Ayrıca dönüşümler ve saydamlık değerleri de çift duyarlıklı olarak ifade edilir.Ayrıca WPF de farklı renk alanlarından gelen girişleri yönetmek için geniş bir renk skalasını (scRGB) destekler ve tümleşik destek sağlar.
· Gelişmiş grafikler ve animasyon desteği.WPF, sahne işleme, işleme döngüleri ve ikili doğrusal ilişkilendirme hakkında daha fazla düşünmenize gerek duymadan animasyon sahnelerini yöneterek grafik programlamasını basitleştirir.Ayrıca, WPF, isabet sınaması desteği ve tam alfa birleştirme desteği sağlar.
· Donanım hızlandırmaları.WPF grafik sistemi, CPU kullanımını azaltmak amacıyla grafik donanımının avantajlarından yararlanır.
2D Şekiller
WPF, aşağıdaki şekilde de gösterilen dikdörtgen ve elips gibi vektörle çizilmiş yaygın 2-B şekillerinin kitaplığını sağlar.

Şekillerin ilginç bir özelliği, yalnızca görüntü için olmamalarıdır; şekiller, klavye ve fare girişini içeren denetimlerden beklediğiniz özelliklerin çoğunu uygular.Aşağıdaki örnek, işlenmekte olan Ellipse'in MouseUp olayını gösterir.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.EllipseEventHandlingWindow"
Title="Click the Ellipse">
<Ellipse Name="clickableEllipse" Fill="Blue" MouseUp="clickableEllipse_MouseUp" />
</Window>
C#
using System.Windows;
using System.Windows.Input;
namespace SDKSample
{
public partial class EllipseEventHandlingWindow : Window
{
public EllipseEventHandlingWindow()
{
InitializeComponent();
}
void clickableEllipse_MouseUp(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Elips’e Tıkladınız!");
}
}
}
VB
Imports System.Windows
Imports System.Windows.Input
Namespace SDKSample
Public Class EllipseEventHandlingWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub clickableEllipse_MouseUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
MessageBox.Show("Elips’e Tıkladınız!")
End Sub
End Class
End Namespace
Aşağıdaki şekil, önceki kod tarafından ne üretildiğini gösterir.

2-B Geometriler
WPF tarafından sağlanan 2-B şekiller, temel şekillerin standart kümesini kapsar.Ancak, özelleştirilmiş UI'nin tasarımını kolaylaştırmak için özel şekiller oluşturmanız gerekebilir.Bu amaçla, WPF geometriler sağlar.Aşağıdaki şekil, doğrudan çizilebilecek, fırça olarak kullanılabilecek veya diğer şekilleri ve denetimleri kırpmak için kullanılabilecek özel bir şekil oluşturmada geometrilerin kullanımını göstermektedir.
Path nesneleri, kapalı veya açık şekiller, birden çok şekil ve hatta eğri şekiller çizmek için kullanılabilir.
Geometry nesneleri, kırpma, isabet sınaması ve 2-B grafik verilerini işleme için kullanılabilir.

2-B Efektler
WPF 2-B özelliklerinin alt kümesi, gradyanlar, bit eşlemler, çizimler, videolar ile boyama, döndürme, ölçeklendirme ve eğme gibi görsel efektler içerir.Bunların tümü fırçalar ile elde edilir; bazı örnekler aşağıdaki şekilde gösterilmiştir.

3-B İşlemler
WPF, daha heyecan verici ve ilginç UI'lerin oluşturulmasına izin vermek için grafikleriyle tümleştirilen 3-B işleme yeteneklerini de içerir.Örneğin, aşağıdaki şekilde, 3-B şekilleri üzerine işlenen 2-B resimleri gösterilmektedir.

-
04 Temmuz 2011 Pazartesi 08:59
Animasyonlar
WPF animasyon desteği, denetimlerin büyümesi, sallanması, dönmesi ve belirmesini, ilginç sayfa geçişleri ve daha fazlasını oluşturmanızı sağlar.Çoğu WPF sınıfına, hatta özel sınıflara bile animasyon ekleyebilirsiniz.Aşağıdaki şekil, hareket eden basit bir animasyonu gösterir.
Windows Presentation Foundation (WPF) etkileyici kullanıcı arabirimleri ve çarpıcı belgeleri oluşturmanıza imkan veren güçlü bir grafik ve düzen özellikleri kümesi sağlar.Animasyon etkileyici kullanıcı arabimini daha muhteşem ve kullanışlı bir kullanıcı arabirimi yapabilir.Yalnızca arka plan rengi animasyonu veya animasyonlu Transform uygulayarak etkileyici ekran geçişleri oluşturabilir veya yararlı görsel yardımlar sağlayabilirsiniz.
Bu genel bakış WPF animasyonuna ve zamanlama sistemine tanıtım sağlar.Film şeritleri kullanarak WPF nesnelerinin animasyonu üzerinde odaklanır.

Not : İleriki konularda ana başlık olarak animasyonlar hakkında her şey açıklanacaktır. -
04 Temmuz 2011 Pazartesi 09:31
Medya
Zengin içeriği iletmenin bir yolu, görsel ve işitsel ortam kullanımı aracılığıyla olur.WPF, resimler, video ve ses için özel destek sağlar.
Resimler
Resimler, çoğu uygulamalarda ortaktır ve WPF, onları kullanmada çeşitli yollar sağlar.Aşağıdaki şekilde, küçük resimler içeren bir liste kutusu olan bir UI gösterilmektedir.Küçük resim seçildiğinde, resim tam boyutta gösterilir.

Video ve Ses
MediaElement denetimi, video ve ses çalma yeteneğine sahiptir ve özel bir ortam yürütücüsünün temeli olmada yeterince esnektir.Aşağıdaki XAML biçimlendirmesi bir ortam yürütücüsünü uygular.
<MediaElement
Name="myMediaElement"
Source="media/wpf.wmv"
LoadedBehavior="Manual"
Width="350" Height="250" />
Aşağıdaki şekilde, pencere MediaElement denetimi çalışırken gösterilmektedir.

Aşağıdaki örnek XAML kodunda bir MediaElement oluşturulup içinde otomatik olarak başlayacak bir video adresi atanmıştır.
<Window x:Class="ForMSDN.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="294" Width="395">
<Grid Height="211" Name="grid1" Margin="0,22.5,2,22.5">
<MediaElement Height="189" HorizontalAlignment="Left" Margin="10,10,0,0" Name="mediaElement1" VerticalAlignment="Top" Width="349" Source="C:\Users\Public\Videos\Sample Videos\Wildlife.wmv" />
</Grid>
</Window>
-
04 Temmuz 2011 Pazartesi 11:37
Metin ve Tipografi
Yüksek kaliteli metin işlemesini kolaylaştırmak için, WPF aşağıdaki özellikleri sunar:
· OpenType yazı tipi desteği.
· ClearType geliştirmeleri.
· Donanım hızlandırmasının avantajlarından yararlanan yüksek performans.
· Metni, ortam, grafikler ve animasyon ile tümleştirme.
· Uluslararası yazı tipi desteği ve geri dönüş mekanizmaları.
Metnin grafiklerle tümleştirilmesine örnek olarak, aşağıdaki şekilde metin düzenlemelerinin uygulaması gösterilmektedir.

N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
04 Temmuz 2011 Pazartesi 12:03
Belgeler
WPF'in, üç tür belgeyle çalışmak için yerel desteği vardır: akan belgeler, değişmez belgeler ve XML Kağıt Belirtimi (XPS) belgeleri.WPF, belgeleri oluşturma, görüntüleme, yönetme, açıklama ekleme, paketleme ve yazdırma hizmetleri de sağlar.
Akan Belgeler
Akan belgeler, pencere boyutu ve görüntü ayarları değiştiğinde, dinamik olarak içeriği ayarlayarak ve içeriğin akışını yeniden sağlayarak görüntülemeyi ve okunabilirliği en iyi duruma getirmek için tasarlanır.Aşağıdaki XAML biçimlendirmesi, FlowDocument tanımını gösterir.
<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph FontSize="18" FontWeight="Bold">Flow Document</Paragraph>
<Paragraph>
</Paragraph>
...
</FlowDocument>
Aşağıdaki örnekte, akan bir belgenin, görüntüleme, arama ve yazdırma amacıyla FlowDocumentReader içine nasıl yüklendiği gösterilmiştir.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.FlowDocumentReaderWindow"
Title="Flow Document Reader">
<FlowDocumentReader Name="flowDocumentReader" />
</Window>
VB
Imports System.Windows 'Window
Imports System.Windows.Documents 'FlowDocument
Imports System.IO 'FileStream, FileMode
Imports System.Windows.Markup 'XamlReader
Namespace SDKSample
Public Class FlowDocumentReaderWindow
Inherits Window
Public Sub New()
Me.InitializeComponent()
Using stream1 As FileStream = New FileStream("AFlowDocument.xaml", _
FileMode.Open, FileAccess.Read)
Dim document1 As FlowDocument = _
TryCast(XamlReader.Load(stream1), FlowDocument)
Me.flowDocumentReader.Document = document1
End Using
End Sub
End Class
End Namespace
C#
using System.Windows;
using System.Windows.Documents;
using System.IO;
using System.Windows.Markup;
namespace SDKSample
{
public partial class FlowDocumentReaderWindow : System.Windows.Window
{
public FlowDocumentReaderWindow()
{
InitializeComponent();
// Akan Belge içeren dosyayı açın
using (FileStream xamlFile = new FileStream("AFlowDocument.xaml",
FileMode.Open, FileAccess.Read))
{
// XamlReader.Load yöndemi ile dosya araştırma
FlowDocument content = XamlReader.Load(xamlFile) as FlowDocument;
// Ayrıştırılmış Akan belge nesnesinin belge özelliğini ayarlama
this.flowDocumentReader.Document = content;
}
}
}
}
Aşağıdaki örnek sonucu göstermektedir.

Değişmez Belgeler
Değişmez belgeler, özellikle de yazdırma açısından kesin "ne görürseniz onu alırsınız" (WYSIWYG) sunumu gerektiren uygulamalara yöneliktir.Değişmez belgelerin tipik kullanımları masaüstü yayıncılık, sözcük işlem ve orijinal sayfa tasarımına bağlılığın kritik olduğu form düzenidir.
Değişmez belgeler, içerik düzenlemelerini aygıttan bağımsız bir şekilde yönetir.Örneğin, 96 dpi ekranda görüntülenmiş değişmez bir belge, 600 dpi lazer yazıcısı veya 4800 dpi phototypesetter ile yazdırıldığında aynı görünür.Belgenin nitelikleri her aygıtın yeteneklerine bağlı olarak değişmesine rağmen, düzen tüm durumlarda aynı kalır.
XPS Belgeleri
XML Kağıt Belirtimi (XPS) belgeleri, WPF'in değişmez belgeleri üzerine kuruludur.XPS belgeleri, aslında elektronik kağıdın sayfa numaralı gösterimi olan XML tabanlı şema ile açıklanır.XPS, oluşum, paylaşım, yazdırma ve sayfa numaralı belgeleri arşivlemeyi kolaylaştırmak için tasarlanan açık, çapraz platform belge biçimidir.XPS teknolojisinin önemli özellikleri aşağıdakileri içerir:
· XPS belgelerini, Açık Paketleme Kuralları'na (OPC) uygun ZipPackage dosyaları olarak paketleme.
· Tek başına ve tarayıcı tabanlı uygulamalar içinde barındırma.
· El ile oluşturma ve WPF uygulamalarındaki XPS belgelerini düzenleme.
· Çıkış aygıtı kalitesini en yükseğe hedefleyerek yüksek duyarlılıkta işleme.
· Windows Vista yazdırma biriktirme.
· Belgeleri doğrudan XPS-uyumlu yazıcılara yönlendirme.
· DocumentViewer ile UI tümleştirmesi.
Aşağıdaki şekil DocumentViewer tarafından görüntülenen XPS belgesini göstermektedir.

Ek açıklamalar
Ek açıklamalar, bilgilere bayrak atamak ya da sonraki başvurular için ilgi çekici konuları vurgulamak amacıyla belgelere eklenen notlar veya yorumlardır.Yazdırılmış belgelerin üzerine not yazmak kolay olsa da, elektronik belgelerin üzerine "yazma" yeteneği genellikle sınırlıdır veya mevcut değildir.Ancak, WPF içinde yapışkan notları ve vurguları desteklemek için ek açıklamalar sistemi sağlanır.Ayrıca, bu ek açıklamalar, aşağıdaki şekilde gösterildiği gibi DocumentViewer denetimi içinde barındırılan belgelere uygulanabilir.

Paketleme
WPF System.IO.Packaging API'ler, uygulamalarınızda veri, içerik ve kaynakları tek, taşınabilir, kolayca dağıtılabilen ve erişilebilen ZIP belgeleri içinde düzenlemenize izin verir.Bir paketin içerdiği öğelerin kimliğini doğrulamak ve imzalı öğeyle oynanmadığı veya imzalı öğenin değiştirilmediğini doğrulamak için dijital imzalar eklenebilir.Korunan bilgilere erişimi kısıtlamak için, hak yönetimini kullanarak paketleri de şifreleyebilirsiniz.
Daha fazla bilgi için bkz: WPF'deki Belgeler.
Yazdırma
.NET Framework, WPF'in gelişmiş yazdırma sistemi denetimi için desteği genişleten bir yazdırma alt sistemi içerir.Yazdırma geliştirmeleri aşağıdakileri içerir:
· Uzak yazdırma sunucu ve sıralarının gerçek zamanlı yüklenmesi.
· Yazıcı yeteneklerinin dinamik keşfi.
· Yazıcı seçeneklerinin dinamik ayarı.
· Yazdırma işini yeniden yönlendirme ve öncelik atama.
XPS belgelerinin anahtar performans geliştirmesi de vardır.Varolan Microsoft Windows Grafik Aygıt Arabirimi (GDI) yazdırma yolu genellikle iki dönüşüm gerektirir:
· Birincisi, bir belgeyi Gelişmiş Meta Dosyası (EMF) gibi yazdırma işlemcisi biçimine dönüştürme.
· İkincisi, Printer Control Language (PCL) veya PostScript gibi yazıcının sayfa tanımlama diline dönüştürme.
Ancak, XPS belgeleri, XPS dosya biçiminin bir bileşeninin yazdırma işlemcisi dili ve sayfa tanımlama dili olmasından dolayı bu dönüşümlerden kaçınır.Bu destek, biriktirme dosya boyutu ve ağa bağlı yazıcı yüklerinin azaltılmasında yardımcı olur.
N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
04 Temmuz 2011 Pazartesi 12:20
WPF Uygulamalarını Özelleştirme
Bu noktaya kadar, uygulamaları geliştirmede temel WPF yapı taşlarını gördünüz.Çoğunlukla denetimlerden oluşan uygulama içeriğini barındırmak ve teslim etmek için uygulama modeli kullanın.UI içinde denetimlerin düzenlemesini basitleştirmek ve düzenlemenin, pencere boyutu ve görüntü ayarlarındaki değişiklikler karşısında korunduğundan emin olmak için WPF düzen sistemini kullanın.Çoğu uygulamanın, veriyle etkileşim kurmaları için kullanıcılara izin vermesinden dolayı, UI'nizin veriyle tümleştirme işini azaltmada veri bağlaması kullanın. Uygulamanızın görünümünü geliştirmek için, WPF tarafından sağlanan kapsamlı grafikler, animasyon ve ortamı kullanın.Son olarak, uygulamanız metin ve belgeler üzerinde çalışıyorsa, WPF'in metin, tipografi, belge, ek açıklama, paketleme ve yazdırma yeteneklerini kullanabilirsiniz.
Genellikle, gerçekten farklı ve görsel olarak şaşırtıcı bir kullanıcı deneyimi oluşturmak ve yönetmek için temel bilgiler yeterli değildir.Standart WPF denetimleri, uygulamanızın istenen görünümüyle tümleştirilemeyebilir.Veriler en etkili şekilde görüntülenmeyebilir.Uygulamanızın genel kullanıcı deneyimi, varsayılan Windows temalarının görünümüne uygun olmayabilir.Birçok açıdan, sunu teknolojisi, herhangi bir türdeki genişletilebilirlik gibi görsel genişletilebilirliğe ihtiyaç duyar.
Bu nedenle, WPF, denetimler, tetikleyiciler, denetim ve veri şablonları, stiller, UI kaynakları, temalar ve dış görünümler için zengin bir içerik modeli içeren benzersiz kullanıcı deneyimleri oluşturmada çeşitli mekanizmalar sağlar.
İçerik Modeli
Çoğu WPF denetiminin ana amacı, içeriği görüntülemektir.WPF içinde, denetimin içeriğini oluşturan öğelerin türü ve sayısı, denetimin içerik modeli olarak adlandırılır.Bazı denetimler tek öğe ve içerik türü içerebilir; örneğin, TextBox'ın içeriği, Text özelliğine atanan bir dize değeridir.Aşağıdaki örnekte, TextBox'ın içeriği ayarlanmaktadır.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.TextBoxContentWindow"
Title="TextBox Content">
...
<TextBox Text="Bu bir TextBox’ın içeriğidir." />
...
</Window>
Aşağıdaki şekide işlemin sonucu görünmektedir.

Diğer denetimler, ancak farklı içerik türlerinin birden çok öğesini içerebilir; Content özelliği tarafından belirtilen Button içeriği, düzen denetimleri, metin, resimler ve şekiller içeren çeşitli öğeleri içerebilir.Aşağıdaki örnek, DockPanel, Label, Border ve MediaElement içeren Button içeriğini göstermektedir.
Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.ButtonContentWindow"
Title="Button Content">
...
<Button Margin="20">
<!-- Button Content -->
<DockPanel Width="200" Height="180">
<Label DockPanel.Dock="Top" HorizontalAlignment="Center">Bana Tıkla!</Label>
<Border Background="Black" BorderBrush="Yellow" BorderThickness="2"
CornerRadius="2" Margin="5">
<MediaElement Source="media/wpf.wmv" Stretch="Fill" />
</Border>
</DockPanel>
</Button>
...
</Window>
Aşağıdaki şekil bu düğmenin içeriğini gösterir.

Çeşitli denetimler tarafından desteklenen içerik türleri hakkında daha fazla bilgi için, bkz: WPF İçerik Modeli.
Tetikleyiciler
XAML biçimlendirmesinin ana amacı, bir uygulamanın görünümünü uygulamak olmasına karşın, uygulama davranışının bazı yönlerini uygulamak için de XAML kullanabilirsiniz.Kullanıcı etkileşimlerine dayalı bir uygulamanın görünümünü değiştirmede tetikleyicilerin kullanılması buna bir örnektir.Daha fazla bilgi içinStillendirme ve Şablon Oluşturma içindeki "Tetikleyiciler" konusuna bakın.
Denetim Şablonları
WPF denetimleri için varsayılan UI'ler, genellikle diğer denetim ve şekillerden oluşturulur.Örneğin, Button, ButtonChrome ve ContentPresenter denetimlerinden oluşur.ContentPresenter, düğmenin Content özelliği tarafından belirtilen içeriğini görüntülerken ButtonChrome, standart düğme görünümünü sağlar.
Bazen, denetimin varsayılan görünümü, uygulamanın genel görünümüne benzemeyebilir.Bu durumda, denetimin içeriği ve davranışını değiştirmeden UI görünümünü değiştirmek için bir ControlTemplate kullanabilirsiniz.
Örneğin, aşağıdaki örnekte, ControlTemplate kullanarak Button'un görünümünün nasıl değiştirildiği gösterilmektedir.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.ControlTemplateButtonWindow"
Title="Button with Control Template" Height="158" Width="290">
<!-- Buton bir elips kullanıyor -->
<Button Content="Click Me!" Click="button_Click">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Margin="5">
<Ellipse Stroke="DarkBlue" StrokeThickness="2">
<Ellipse.Fill>
<RadialGradientBrush Center="0.3,0.2" RadiusX="0.5" RadiusY="0.5">
<GradientStop Color="Azure" Offset="0.1" />
<GradientStop Color="CornflowerBlue" Offset="1.1" />
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter Name="content" HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</Window>
C#
using System.Windows;
namespace SDKSample
{
public partial class ControlTemplateButtonWindow : Window
{
public ControlTemplateButtonWindow()
{
InitializeComponent();
}
void button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Merhaba, Windows Presentation Foundation!");
}
}
}
VB
Imports System.Windows
Namespace SDKSample
Public Class ControlTemplateButtonWindow
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) MessageBox.Show("Merhaba, Windows Presentation Foundation!")
End Sub
End Class
End Namespace
Bu örnekte, varsayılan UI düğmesi, koyu mavi kenarlığı olan ve RadialGradientBrush kullanılarak doldurulan Ellipse ile değiştirilmiştir.ContentPresenter denetimi, "Beni Tıklat!" Button'unun içeriğini görüntüler. Button tıklatıldığında, Click olayı hala Button denetiminin varsayılan davranışının bir parçası olarak oluşturulur.
N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
25 Temmuz 2011 Pazartesi 12:31
Denetim şablonu, denetimin görünümünü belirlemenizi sağlarken veri şablonu, denetim içeriğinin görünümünü belirlemenizi sağlar.Veri şablonları, bağlı verinin nasıl görüntüleneceğini geliştirmede sık sık kullanılır.Aşağıdaki şekil, her görevin bir adı, açıklaması ve önceliği olduğu Task nesneleri topluluğuna bağlı ListBox için varsayılan görünümü gösterir.

Varsayılan görünüm, ListBox'tan beklediğinizdir.Ancak, her görevin varsayılan görünümü yalnızca görev adını içerir.Görev adı, açıklaması ve önceliğini göstermek için, ListBox denetiminin bağlı liste öğelerine ait varsayılan görünümün bir DataTemplate kullanılarak değiştirilmesi gerekir.Aşağıdaki XAML, ItemTemplate özniteliğini kullanarak her bir göreve uygulanan türde bir DataTemplate tanımlar.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.DataTemplateWindow"
Title="With a Data Template">
...
<Window.Resources>
<!—Veri Şablonu (görev koleksyonundfa bağlı her görev öğesine uygulanır) -->
<DataTemplate x:Key="myTaskTemplate">
<Border Name="border" BorderBrush="DarkSlateBlue" BorderThickness="2"
CornerRadius="2" Padding="5" Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Padding="0,0,5,0" Text="Task Name:"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=TaskName}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Padding="0,0,5,0" Text="Description:"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Description}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Padding="0,0,5,0" Text="Priority:"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Priority}"/>
</Grid>
</Border>
</DataTemplate>
</Window.Resources>
...
<!-- UI -->
<DockPanel>
<!-- Etiket -->
<Label DockPanel.Dock="Top" FontSize="18" Margin="5" Content="My Task List:"/>
<!—ItemTemplate özelliği tarafınrdan belirtilen veri şablonu -->
<ListBox
ItemsSource="{Binding}"
ItemTemplate="{StaticResource myTaskTemplate}"
HorizontalContentAlignment="Stretch"
IsSynchronizedWithCurrentItem="True"
Margin="5,0,5,5" />
</DockPanel>
...
</Window>
Aşağıdaki şekil bu kodun etkisini gösterir.

N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
25 Temmuz 2011 Pazartesi 12:40
Stiller
Stiller, geliştirici ve tasarımcılara, ürünlerinin belirli bir görünümünü standartlaştırmalarını sağlar.WPF, Style öğesinin temeli olan güçlü bir stil modeli sağlar.Aşağıdaki örnek, pencere üzerindeki her Button için arka plan rengini Orange'a 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">
...
<!—Tüm Butonlara uygulanacak Stil -->
<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>
...
<!—Bu Buton Uygulanan Stile Sahip Olacak -->
<Button>Bana Tıkla!</Button>
<!—Bu label Uygulanan Stile Sahip Olmayacak -->
<Label>Bana Tıklama!</Label>
<!—Bu Buton Uygulanan Stile Sahip Olacak -->
<Button>Bana Tıkla!</Button>
...
</Window>
Bu stilin tüm Button denetimlerini hedeflemesinden dolayı, aşağıdaki şekilde gösterildiği gibi stil, pencere içindeki tüm düğmelere otomatik olarak uygulanır.

N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
25 Temmuz 2011 Pazartesi 12:46
Kaynaklar
Bir uygulama içindeki denetimlerin, yazı tipleri ve arka plan renklerinden denetim ve veri şablonları, stillere kadar her şeyi aynı olan görünümü paylaşmaları gerekir.Kullanıcı arabirimi (UI) kaynaklarını, yeniden kullanma için tek bir konumda kapsamada WPF desteğini kullanabilirsiniz.
Aşağıdaki örnekte, Button ve Label tarafından paylaşılan genel bir arka plan rengi tanımlanır.
<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">
<!—-Pencere Kapsamlı Arkaplan Renk Kaynağını Tanımla -->
<Window.Resources>
<SolidColorBrush x:Key="defaultBackground" Color="Red" />
</Window.Resources>
...
<!—Düğme arkaplanı pencere kapsamlı bir kaynak tarafından tanımlanır -->
<Button Background="{StaticResource defaultBackground}">One Button</Button>
<!-- Label arkaplanı pencere kapsamlı bir kaynak tarafından tanımlanır -->
<Label Background="{StaticResource defaultBackground}">One Label</Label>
...
</Window>
Bu örnekte, Window.Resources özellik öğesi kullanılarak arka plan renk kaynağı uygulanır.Bu kaynak, Window'un tüm alt öğeleri tarafından kullanılabilir.Çözümlendikleri sırayla listelenen aşağıdakiler de dahil çeşitli kaynak kapsamları vardır.
1. Tek denetim (devralınan FrameworkElementResources özelliğini kullanarak).
2. Window veya Page (devralınan FrameworkElementResources özelliğini kullanarak).
3. Bir Application (ApplicationResources özelliğini kullanarak).
Çeşitli kapsamlar, kaynaklarınızı tanımladığınız ve paylaştığınız şekilde esneklik sağlar.
Belirli bir kapsamla kaynaklarınızı doğrudan ilişkilendirmeye alternatif olarak, uygulamanın diğer bölümlerinde başvurulabilen ayrı bir ResourceDictionary kullanarak bir veya daha fazla kaynağı paketleyebilirsiniz.Örneğin, aşağıdaki örnekte, kaynak sözlükte varsayılan arka plan rengi tanımlanır.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!—Arka plan renk kaynağını tanımla -->
<SolidColorBrush x:Key="defaultBackground" Color="Red" />
<!—Diğer kaynakları tanımla -->
...
</ResourceDictionary>
Aşağıdaki örnek, önceki örnekte tanımlanan kaynak sözlüğüne bir uygulama üzerinde paylaşılacak şekilde başvurur.
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="BackgroundColorResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
...
</Application>
Kaynak ve kaynak sözlükleri, tema ve dış görünümler için WPF desteğinin temelidir.
N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
25 Temmuz 2011 Pazartesi 12:48
Temalar ve Dış Görünümler
Görsel açıdan bakıldığında, bir tema, Windows'un genel görünümünü ve onun içinde çalışan uygulamaları tanımlar.Windows birçok temayla birlikte gelir.Örneğin, Windows Vista, hem Windows Vista hem de Windows Classic temaları ile birlikte gelirken Microsoft Windows XP, Windows XP ve Windows Classic temaları ile birlikte gelir.Tema tarafından tanımlanan görünüm, WPF uygulaması için varsayılan görünümü tanımlar.Ancak WPF, Windows temalarıyla doğrudan tümleştirilmez. WPF görünümünün şablonlar tarafından tanımlanmasından dolayı, WPF, Aero (Windows Vista), Classic (Microsoft Windows 2000), Luna (Microsoft Windows XP) ve Royale (Microsoft Windows XP Media Center Edition 2005) da dahil olmak üzere iyi bilinen her bir Windows teması için bir şablon içerir. Bu temalar, kaynaklar uygulama içinde bulunmadığında çözümlenen kaynak sözlükleri olarak paketlenir. Çoğu uygulama, kendi görsel görünümünü tanımlamada bu temalara bağlıdır; Windows görünümüyle tutarlı kalma, kullanıcılara daha fazla uygulamayı daha kolay öğrenmelerinde yardımcı olur.
Diğer taraftan, bazı uygulamalar için kullanıcı deneyiminin standart temalardan gelmesi gerekli değildir.Örneğin, Microsoft Windows Media Player, ses ve video verilerinde çalışır ve kullanıcı deneyiminin farklı bir stilinden yararlanır.Bu tür UI'ler, özelleştirilmiş, uygulamaya özel temalar sağlamaya eğilimlidirler.Bunlar dış görünümler olarak bilinir ve dış görünüme sahip olan uygulamalar genellikle, kullanıcıların, dış görünümün çeşitli yönlerini özelleştirebilmelerini sağlayan kancalar sağlar. Microsoft Windows Media Player, üçüncü taraf dış görünümlerinin yanında birçok hazırlanmış kalıcı dış görünüme de sahiptir.
WPF içindeki temalar ve dış görünümler, kaynak sözlükleri kullanılarak kolayca tanımlanır.Aşağıdaki örnek, örnek dış görünüm tanımlarını gösterir.
<!—Mavi Görünüm -->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SDKSample">
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue" />
</Style>
...
</ResourceDictionary>
<!—Sarı Görünüm -->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SDKSample">
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Yellow" />
</Style>
...
</ResourceDictionary>
N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
25 Temmuz 2011 Pazartesi 13:02
Özel Denetimler
WPF özelleştirme desteği sağlamasına rağmen varolan WPF denetimlerinin, uygulamanızın veya kullanıcılarının gereksinimlerini karşılayamadığı durumlarla karşılaşabilirsiniz.Bu, aşağıdaki durumlarda gerçekleşir:
· Gereksinim duyduğunuz UI, var olan WPF uygulamalarının görünümü özelleştirilerek oluşturulamaz.
· Gereksinim duyduğunuz davranış var olan WPF uygulamaları tarafından desteklenmez (veya kolayca desteklenmez).
Bu noktada, yeni bir denetim oluşturmak için ancak WPF modellerinin birinden yararlanabilirsiniz.Her model, belirli bir senaryoyu hedefler ve belirli WPF temel sınıfından türetmede özel denetim gerektirir.Üç model burada listelenir:
· Kullanıcı Denetim Modeli.Özel denetim, UserControl'dan türetilir ve bir ya da daha çok denetimden oluşur.
· Denetim Modeli.Özel denetim, Control'dan türetilir ve WPF denetimlerinin çoğunda olduğu gibi, şablonları kullanarak davranışlarını görünümlerinden ayıran uygulamaları oluşturmak için kullanılır.Control'dan türetme, kullanıcı denetimlerinin oluşturulmasına göre özel UI'lerin oluşturulmasında daha fazla özgürlük sağlar fakat bu çok fazla çaba gerektirebilir.
· Çerçeve Öğe Modeli.Özel bir denetim, görünümü özel işleme mantığı tarafından tanımlandığında FrameworkElement'ten türer (şablon yok).
Aşağıdaki örnek, UserControl'dan türeyen özel bir sayısal yukarı/aşağı denetimini gösterir.
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.NumericUpDown">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!—Değer Metin Kutusu-->
<Border BorderThickness="1" BorderBrush="Gray" Margin="2" Grid.RowSpan="2"
VerticalAlignment="Center" HorizontalAlignment="Stretch">
<TextBlock Name="valueText" Width="60" TextAlignment="Right" Padding="5"/>
</Border>
<!—Yukarı/Aşağı Butonları -->
<RepeatButton Name="upButton" Click="upButton_Click" Grid.Column="1"
Grid.Row="0">Yukarı</RepeatButton>
<RepeatButton Name="downButton" Click="downButton_Click" Grid.Column="1"
Grid.Row="1">Aşağı</RepeatButton>
</Grid>
</UserControl>
C#
using System; // EventArgs
using System.Windows; // DependencyObject, DependencyPropertyChangedEventArgs,
// FrameworkPropertyMetadata, PropertyChangedCallback,
// RoutedPropertyChangedEventArgs
using System.Windows.Controls; // UserControl
namespace SDKSample
{
public partial class NumericUpDown : UserControl
{
// NumericUpDown kullanıcı kontrolü uygulaması
...
}
}
Sonraki örnek, Window içinde kullanıcı denetimini eklemek için gerekli olan XAML'i gösterir.
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.UserControlWindow"
xmlns:local="clr-namespace:SDKSample"
Title="User Control Window">
...
<!-- Numeric Up/Down kullanıcı kontrolü -->
<local:NumericUpDown />
...
</Window>
Aşağıdaki şekil, Window içinde tutulan NumericUpDown denetimini gösterir.

N Bilişim Bilgisayar Danışmanlık San. Ltd. Şti. -
09 Eylül 2011 Cuma 20:54
Hiyerarşi oluşturma için detaylı bilgi nereden alabilirim?XAML XML tabanlı olduğundan, onunla oluşturan bu UI bir eleman ağacı olarak bilinen iç içe geçmiş öğeleri bir hiyerarşi içinde monte edilir.Eleman ağacı UI oluşturmak ve yönetmek için mantıksal ve sezgisel bir yol sağlar.
Gökhan KARA - Süleyman Demirel Üniversitesi - Bilgisayar Ve Kontrol Öğretmenliği - Yazılım Kulübü Başkanı - Gelecex SDÜ Temsilcisi -
13 Aralık 2011 Salı 17:09
Ben .net'te görselliğe önem veren birisiyim ama nasıl yapacağımı bilmiyordum.
Sanırım burada istediğim herşey mevcut.
Çok güzel anlatmışsınız.Emeğiniz için teşekkürler.