Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Presentation Foundation (WPF) stil oluşturma ve şablon oluşturma, görsel olarak ilgi çekici efektler ve ürününüz için tutarlı bir görünüm oluşturmak için kullandığınız bir özellik paketine başvurur. Bir uygulamanın görünümünü özelleştirdiğinizde, uygulamalar içinde ve uygulamalar arasında görünümü korumanızı ve paylaşmanızı sağlayan güçlü bir stil ve şablon oluşturma modeli istersiniz. WPF bu modeli sağlar.
WPF stil modelinin bir diğer özelliği de sunu ve mantığın ayrılmasıdır. Tasarımcılar, geliştiricilerin C# veya Visual Basic kullanarak programlama mantığı üzerinde çalıştığı aynı anda yalnızca XAML kullanarak bir uygulamanın görünümü üzerinde çalışabilir.
Bu genel bakış, uygulamanın stil ve şablon oluşturma yönlerine odaklanır ve veri bağlama kavramlarını tartışmaz. Veri bağlama hakkında bilgi için bkz. Veri Bağlamaya Genel Bakış.
Stillerin ve şablonların yeniden kullanılmasını sağlayan kaynakları anlamak önemlidir. Kaynaklar hakkında daha fazla bilgi için bkz . XAML kaynaklarına genel bakış.
Örnek
Bu genel bakışta sağlanan örnek kod, aşağıdaki çizimde gösterilen basit bir fotoğraf tarama uygulaması temel alır.
Bu basit fotoğraf örneği, görsel olarak ilgi çekici bir kullanıcı deneyimi oluşturmak için stil ve şablon oluşturmayı kullanır. Örnekte iki TextBlock öğesi ve görüntü listesine bağlı bir ListBox denetimi vardır.
Örneğin tamamı için bkz. Stil Oluşturma ve Şablon Oluşturma Örneğine Giriş.
Stil
Bir Style, birden çok öğeye özellik değerleri kümesi uygulamak için kullanışlı bir yol olarak düşünebilirsiniz. FrameworkElement veya FrameworkContentElement'den türetilen ve Window veya Buttongibi olan herhangi bir öğede stil kullanabilirsiniz.
Stil bildirmenin en yaygın yolu, XAML dosyasının Resources bölümünde yer alan bir kaynaktır. Stiller kaynak olduğundan, tüm kaynaklarda olduğu gibi aynı kapsam kurallarını izlerler. Bir stili bildirdiğiniz yer, bunu uygulayabileceğiniz yeri etkiler. Örneğin, uygulama tanımı XAML dosyanızın kök öğesinde stili bildirirseniz, stili uygulamanızın herhangi bir yerinde kullanabilirsiniz.
Aşağıdaki XAML kodu, bir TextBlockiçin iki stil bildirir: biri tüm TextBlock öğelere otomatik olarak uygulanır ve diğeri açıkça başvurulmalıdır.
<Window.Resources>
<!-- .... other resources .... -->
<!--A Style that affects all TextBlocks-->
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="FontFamily" Value="Comic Sans MS"/>
<Setter Property="FontSize" Value="14"/>
</Style>
<!--A Style that extends the previous TextBlock Style with an x:Key of TitleText-->
<Style BasedOn="{StaticResource {x:Type TextBlock}}"
TargetType="TextBlock"
x:Key="TitleText">
<Setter Property="FontSize" Value="26"/>
<Setter Property="Foreground">
<Setter.Value>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.0" Color="#90DDDD" />
<GradientStop Offset="1.0" Color="#5BFFFF" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
Aşağıdaki örnekte, önceki stillerin nasıl kullanılacağı gösterilmektedir.
<StackPanel>
<TextBlock Style="{StaticResource TitleText}" Name="textblock1">My Pictures</TextBlock>
<TextBlock>Check out my new pictures!</TextBlock>
</StackPanel>
Daha fazla bilgi için bkz Bir denetim için stil oluşturma.
ControlTemplates
WPF'de, denetimin ControlTemplate denetimin görünümünü tanımlar. Yeni bir ControlTemplate tanımlayıp bir denetime atayarak denetimin yapısını ve görünümünü değiştirebilirsiniz. Çoğu durumda şablonlar, kendi özel denetimlerinizi yazmanız gerekmeyecek kadar esneklik sağlar.
Her denetimin Control.Template özelliğine atanmış varsayılan bir şablonu vardır. Şablon, denetimin görsel sunumunu denetimin özelliklerine bağlar. XAML'de şablon tanımladığınızdan, herhangi bir kod yazmadan denetimin görünümünü değiştirebilirsiniz. Her şablon, Buttongibi belirli bir denetim için tasarlanmıştır.
Önemli
Bir denetimin görsel ağacını değiştirdiğinizde, tüm ControlTemplate'yi değiştirmeniz gerekir. Denetimin görsel ağacının yalnızca bir bölümünü değiştirmenin hiçbir yolu yoktur. Bir denetimin görsel ağacını değiştirmek için, denetimin Template özelliğini yeni ve eksiksiz ControlTemplateolarak ayarlamanız gerekir.
Genellikle XAML dosyasının Resources bölümünde bir şablonu kaynak olarak bildirirsiniz. Tüm kaynaklarda olduğu gibi kapsam belirleme kuralları da geçerlidir.
Denetim şablonları bir stilden çok daha karmaşıktır. Bu karmaşıklık, denetim şablonunun denetimin tamamının görsel görünümünü yeniden yazması ve bir stilin mevcut denetime özellik değişikliklerini uygulaması nedeniyle ortaya çıkıyor. Ancak, denetimin şablonu Control.Template
Tasarımcılar genellikle var olan bir şablonun kopyasını oluşturmanıza ve değiştirmenize olanak sağlar. Örneğin, Visual Studio WPF tasarımcısında bir CheckBox denetimi seçin ve sağ tıklayıp şablonu düzenle >bir kopya oluştur'u seçin. Bu komut, stilinin birşablonu tanımlamasını sağlar.
<Style x:Key="CheckBoxStyle1" TargetType="{x:Type CheckBox}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual1}"/>
<Setter Property="Background" Value="{StaticResource OptionMark.Static.Background1}"/>
<Setter Property="BorderBrush" Value="{StaticResource OptionMark.Static.Border1}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Grid x:Name="templateRoot" Background="Transparent" SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Border x:Name="checkBoxBorder" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<Grid x:Name="markGrid">
<Path x:Name="optionMark" Data="F1 M 9.97498,1.22334L 4.6983,9.09834L 4.52164,9.09834L 0,5.19331L 1.27664,3.52165L 4.255,6.08833L 8.33331,1.52588e-005L 9.97498,1.22334 Z " Fill="{StaticResource OptionMark.Static.Glyph1}" Margin="1" Opacity="0" Stretch="None"/>
<Rectangle x:Name="indeterminateMark" Fill="{StaticResource OptionMark.Static.Glyph1}" Margin="2" Opacity="0"/>
</Grid>
</Border>
<ContentPresenter x:Name="contentPresenter" Grid.Column="1" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasContent" Value="true">
<Setter Property="FocusVisualStyle" Value="{StaticResource OptionMarkFocusVisual1}"/>
<Setter Property="Padding" Value="4,-1,0,0"/>
... content removed to save space ...
Şablonun bir kopyasını düzenlemek, şablonların nasıl çalıştığını öğrenmenin harika bir yoludur. Yeni boş bir şablon oluşturmak yerine, bir kopyayı düzenlemek ve görsel sununun birkaç yönünü değiştirmek daha kolaydır.
Örnek için bkz. , denetimiçin bir şablon oluşturma.
ŞablonBağlama
Önceki bölümde tanımlanan şablon kaynağının TemplateBinding İşaretlemeyi Uzantısını kullandığını fark edebilirsiniz.
TemplateBinding, {Binding RelativeSource={RelativeSource TemplatedParent}}ile yapılan bağlamaya benzer şekilde şablon senaryoları için iyileştirilmiş bir bağlama biçimidir.
TemplateBinding, şablonun bölümlerini denetimin özelliklerine bağlamak için kullanışlıdır. Örneğin, her denetimin bir BorderThickness özelliği vardır. Şablondaki hangi öğenin bu denetim ayarından etkilendiğini yönetmek için bir TemplateBinding kullanın.
ContentControl ve ItemsControl
Bir ContentPresenter öğesi, bir ControlTemplateContentControl içinde bildirildiğinde, ContentPresenter otomatik olarak ContentTemplate ve Content özelliklerine bağlanır. Benzer şekilde, bir ItemsPresenter içindeki ControlTemplate, ItemsControl özelliklerine ve otomatik olarak ItemTemplateItems'e bağlanır.
Veri Şablonları
Bu örnek uygulamada, bir ListBox denetim bir fotoğraf listesine bağlanır.
<ListBox ItemsSource="{Binding Source={StaticResource MyPhotos}}"
Background="Silver" Width="600" Margin="10" SelectedIndex="0"/>
Bu ListBox , şu anda aşağıdaki görüntüye benzer.
Denetimlerin çoğu bir tür içeriğe sahiptir ve bu içerik genellikle bağladığınız verilerden gelir. Bu örnekte veriler fotoğrafların listesidir. WPF'de, verilerin görsel gösterimini tanımlamak için bir DataTemplate kullanırsınız. Temel olarak, bir DataTemplate içine koyduğunuz veriler, uygulamanın render edildiğinde nasıl görüneceğini belirler.
Bu örnek uygulamada, her özel Photo nesnenin, görüntünün dosya yolunu belirten bir tür dizesi özelliği vardır Source . Şu anda fotoğraf nesneleri dosya yolları olarak görünür.
public class Photo
{
public Photo(string path)
{
Source = path;
}
public string Source { get; }
public override string ToString() => Source;
}
Public Class Photo
Sub New(ByVal path As String)
Source = path
End Sub
Public ReadOnly Property Source As String
Public Overrides Function ToString() As String
Return Source
End Function
End Class
Fotoğrafların görüntü olarak görünmesi için kaynak olarak bir DataTemplate oluşturursunuz.
<Window.Resources>
<!-- .... other resources .... -->
<!--DataTemplate to display Photos as images
instead of text strings of Paths-->
<DataTemplate DataType="{x:Type local:Photo}">
<Border Margin="3">
<Image Source="{Binding Source}"/>
</Border>
</DataTemplate>
</Window.Resources>
DataType özelliğinin TargetTypeStyle özelliğine benzer olduğuna dikkat edin. Kaynaklar bölümüne bir DataTemplate eklerseniz ve DataType özelliğini bir türe ayarlayıp bir x:Key atlarsanız, bu tür her göründüğünde DataTemplate uygulanır. Ayrıca, DataTemplate öğesine bir x:Key atayabilir ve ardından ItemTemplate özelliği veya ContentTemplate özelliği gibi DataTemplate türlerini alan özellikler için StaticResource olarak ayarlayabilirsiniz.
Temel olarak, yukarıdaki örnekte DataTemplate, her bir Photo nesnesinin Border içinde Image olarak görünmesi gerektiğini tanımlar. Bu DataTemplatekullanarak, uygulama artık bu görüntüye benzer.
Veri şablon oluşturma modeli diğer özellikleri sağlar. Örneğin, `HeaderedItemsControl` türünü, örneğin `Menu` veya `TreeView`, kullanarak diğer koleksiyonları içeren koleksiyon verilerini görüntülüyorsanız, `HierarchicalDataTemplate` kullanın. Başka bir veri şablon oluşturma özelliği ise, özel mantığa dayalı olarak bir DataTemplate seçimi yapmanıza olanak tanıyan DataTemplateSelector'dir. Daha fazla bilgi için farklı veri şablon oluşturma özellikleri hakkında daha ayrıntılı bir tartışma sağlayan
Tetikleyiciler
Tetikleyici özellikleri ayarlar veya bir özellik değeri değiştiğinde veya bir olay tetiklendiğinde animasyon gibi eylemleri başlatır.
Style, ControlTemplateve DataTemplate'nin hepsinin tetikleyici kümesi içerebilen bir Triggers özelliği vardır. Birkaç tetikleyici türü vardır.
Özellik tetikleyicileri
Özellik değerlerini ayarlayan veya bir özelliğin değerine göre eylemler başlatan bir Trigger özellik tetikleyicisi olarak adlandırılır.
Özellik tetikleyicilerinin nasıl kullanılacağını göstermek için, seçilmediği sürece her ListBoxItem kısmen saydam hale getirebilirsiniz. Aşağıdaki stil, bir Opacity'in ListBoxItem değerini 0.5olarak ayarlar. Ancak IsSelected özelliği trueolduğunda, Opacity1.0olarak ayarlanır.
<Window.Resources>
<!-- .... other resources .... -->
<Style TargetType="ListBoxItem">
<Setter Property="Opacity" Value="0.5" />
<Setter Property="MaxHeight" Value="75" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Trigger.Setters>
<Setter Property="Opacity" Value="1.0" />
</Trigger.Setters>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
Bu örnekte özellik değeri ayarlamak için bir Trigger kullanılır, ancak Trigger sınıfının tetikleyicinin eylem gerçekleştirmesini sağlayan EnterActions ve ExitActions özelliklerine de sahip olduğunu unutmayın.
MaxHeight'in ListBoxItem özelliğinin 75olarak ayarlandığına dikkat edin. Aşağıdaki çizimde, üçüncü öğe seçili öğedir.
Olay tetikleyicileri ve görsel taslaklar
Başka bir tetikleyici türü, bir olayın oluşumuna göre bir dizi eylem başlatan EventTrigger' dir. Örneğin, aşağıdaki EventTrigger nesneleri, fare işaretçisi ListBoxItemüzerine geldiğinde, MaxHeight özelliğinin 90 saniye süresince 0.2 değerine animasyonla ulaşacağını belirtir. Fare öğeden uzaklaştığında, özellik 1 saniyelik bir süre boyunca özgün değere döner. Animasyon için To bir MouseLeave değer belirtmenize gerek olmadığını unutmayın. Bu davranış, animasyonun orijinal değeri takip etmesi nedeniyle gerçekleşir.
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Trigger.Setters>
<Setter Property="Opacity" Value="1.0" />
</Trigger.Setters>
</Trigger>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.2"
Storyboard.TargetProperty="MaxHeight"
To="90" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:1"
Storyboard.TargetProperty="MaxHeight" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
Daha fazla bilgi için bkz. Görsel Taslaklarına genel bakış.
Aşağıdaki çizimde fare üçüncü öğeyi işaret ediyor.
Çoklu Tetikleyiciler, Veri Tetikleyicileri ve Çoklu Veri Tetikleyicileri
Trigger ve EventTriggerek olarak başka tetikleyici türleri de vardır. kullanarak MultiTrigger, özellik değerlerini birden çok koşula göre ayarlayabilirsiniz. DataTrigger Koşulunuzun özelliği veriye bağlı olduğunda MultiDataTrigger kullanın.
Görsel Durumlar
Denetimler her zaman belirli bir durumundadır. Örneğin, fare bir denetimin yüzeyinin üzerinde hareket ettiğinde, denetim genel durumundadır MouseOver. Belirli bir durumu olmayan bir denetim genel Normal durumundadır. Durumlar gruplara ayrılır ve daha önce bahsedilen durumlar CommonStatesdurum grubunun bir parçasıdır. Çoğu denetimin iki durum grubu vardır: CommonStates ve FocusStates. Denetime uygulanan her durum grubunda, denetim her zaman CommonStates.MouseOver ve FocusStates.Unfocusedgibi her grubun tek bir durumunda olur. Ancak, bir denetim CommonStates.Normal ve CommonStates.Disabledgibi aynı grup içinde iki farklı durumda olamaz. Aşağıdaki tabloda çoğu denetimin tanıdığı ve kullandığı durumlar gösterilmektedir.
| VisualState Adı | VisualStateGroup adı | Açıklama |
|---|---|---|
Normal |
CommonStates |
Varsayılan durum. |
MouseOver |
CommonStates |
Fare işaretçisi denetimin üzerine yerleştirilir. |
Pressed |
CommonStates |
Kontrol tuşuna basılır. |
Disabled |
CommonStates |
Denetim devre dışı bırakıldı. |
Focused |
FocusStates |
Kontrol odaklanmış durumda. |
Unfocused |
FocusStates |
Denetimin odağı yok. |
Denetim şablonunun kök öğesinde bir System.Windows.VisualStateManager tanımlayarak, bir denetim belirli bir duruma girdiğinde animasyonları tetikleyebilirsiniz.
VisualStateManager, hangi VisualStateGroup ve VisualState bileşimlerinin izleyebileceğinizi bildirir. Denetim izlenen bir duruma girdiğinde, VisualStateManager ile tanımlanan animasyon başlar.
Örneğin, aşağıdaki XAML kodu CommonStates.MouseOveradlı öğenin dolgu rengine animasyon eklemek için backgroundElement durumunu izler. Denetim CommonStates.Normal'a döndüğünde, animasyon backgroundElement adlı öğenin dolgu rengini eski haline getirir.
<ControlTemplate x:Key="roundbutton" TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="CommonStates">
<VisualState Name="Normal">
<ColorAnimation Storyboard.TargetName="backgroundElement"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
To="{TemplateBinding Background}"
Duration="0:0:0.3"/>
</VisualState>
<VisualState Name="MouseOver">
<ColorAnimation Storyboard.TargetName="backgroundElement"
Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
To="Yellow"
Duration="0:0:0.3"/>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
...
Görsel taslaklar hakkında daha fazla bilgi için bkz. Görsel Taslaklara Genel Bakış.
Paylaşılan kaynaklar ve temalar
Tipik bir WPF uygulaması, uygulama genelinde uyguladığınız birden çok kullanıcı arabirimi kaynağına sahip olabilir. Bu kaynak kümesini uygulamanın teması olarak düşünebilirsiniz. WPF, ResourceDictionary sınıfının kapsadığı bir kaynak sözlüğü kullanarak UI kaynaklarını tema olarak paketlemeyi destekler.
WPF'nin herhangi bir öğenin görsellerini özelleştirmek için kullanıma sunduğu stil ve şablon oluşturma mekanizmasını kullanarak WPF temalarını tanımlayın.
WPF tema kaynaklarını ekli kaynak sözlüklerinde depolayın. Bu kaynak sözlüklerini imzalı bir derlemeye eklemelisiniz. Bunları kodun kendisiyle aynı derlemeye veya yan yana bir derlemeye ekleyebilirsiniz. PresentationFramework.dll için, WPF denetimlerini içeren derlemede, geliştiriciler tema kaynaklarını yan yana dizilmiş derlemeler serisine gömer. çalışma zamanında hangi tema kaynak sözlüğü kullanılacağını işletim sistemi belirler.
Tema, bir öğenin stilini ararken bakılması gereken son yerdir. Genellikle arama, öğe ağacına gidip uygun bir kaynağı arayarak başlar, ardından uygulama kaynak koleksiyonuna bakar ve son olarak sistemi sorgular. Bu arama düzeni, uygulama geliştiricilerine temaya ulaşmadan önce ağaç veya uygulama düzeyindeki herhangi bir nesnenin stilini yeniden tanımlama şansı verir.
Kaynak sözlüklerini, bir temayı birden çok uygulamada yeniden kullanmanıza olanak tanıyan tek tek dosyalar olarak tanımlayabilirsiniz. Aynı kaynak türlerini ancak farklı değerleri sağlayan birden çok kaynak sözlük tanımlayarak değiştirilebilir temalar da oluşturabilirsiniz. Bu stillerin veya diğer kaynakların uygulama düzeyinde yeniden tanımlanması, bir uygulamanın dış görünümünün belirlenmesi için önerilen yaklaşımdır.
Uygulamalar arasında stiller ve şablonlar da dahil olmak üzere bir dizi kaynağı paylaşmak için bir XAML dosyası oluşturun ve bir ResourceDictionary dosyası tanımlayarak bir shared.xaml dosyasına başvuru ekleyin.
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Shared.xaml" />
</ResourceDictionary.MergedDictionaries>
shared.xaml paylaştığınızda, kendi içinde bir stil ve fırça kaynağı kümesi tanımlayan ResourceDictionary, uygulamadaki denetimlerin tutarlı bir görünüme sahip olmasını sağlarsınız.
Daha fazla bilgi için bkz. Birleştirilmiş kaynak sözlükleri.
Özel denetiminiz için tema oluşturmak için, Denetim yazma genel bakışınınTema düzeyinde kaynakları tanımlama bölümüne bakın.
Yerleşik temaları kullanma
WPF, uygulamanıza açıkça uygulayabileceğiniz birkaç yerleşik tema içerir. Bu temalar PresentationFramework derlemelerine eklenir ve uygulamanızın kaynak sözlüklerinde paket URI'lerini kullanarak bunlara başvurabilirsiniz.
Yerleşik tema uygulamak için, temanın kaynak sözlüğünü uygulamasındaki App.xamluygulama kaynaklarınızla birleştirin:
<Application x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero2;component/themes/Aero2.NormalColor.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Kullanılabilir yerleşik temalar
Aşağıdaki tabloda paket URI'leri aracılığıyla kullanılabilen yerleşik temalar listelenmiştir:
| Theme | Paket URI | Açıklama |
|---|---|---|
| Aero2 | /PresentationFramework.Aero2;component/themes/Aero2.NormalColor.xaml |
Windows 8 ve üzeri uygulamalar için varsayılan tema. |
| AeroLite | /PresentationFramework.AeroLite;component/themes/AeroLite.NormalColor.xaml |
Aero2'nin daha az görsel efektli basitleştirilmiş sürümü. |
| Aero | /PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml |
Cam efektleri ve gradyanlar içeren Windows 7 çağı teması. |
| Akıcı | /PresentationFramework.Fluent;component/Themes/Fluent.xaml |
Açık/koyu mod desteğine sahip Windows 11 stili tema (.NET 9+). |
| Luna (Mavi) | /PresentationFramework.Luna;component/themes/Luna.NormalColor.xaml |
Windows XP varsayılan mavi renk düzeni. |
| Luna (Gümüş) | /PresentationFramework.Luna;component/themes/Luna.Metallic.xaml |
Windows XP metalik gümüş renk düzeni. |
| Luna (Zeytin) | /PresentationFramework.Luna;component/themes/Luna.Homestead.xaml |
Windows XP zeytin yeşili renk düzeni. |
| Royale | /PresentationFramework.Royale;component/themes/Royale.NormalColor.xaml |
Windows XP Media Center Edition teması. |
| Classic | /PresentationFramework.Classic;component/themes/Classic.xaml |
Geleneksel Windows 95/98/2000 görünümü. |
Uyarı
.NET Framework uygulamaları için projenizdeki tema derlemelerine (PresentationFramework.Aero2 gibi) başvuru eklemeniz gerekebilir. .NET uygulamaları için tema derlemeleri genellikle otomatik olarak eklenir.
Tavsiye
Geliştirici başvurusu için Visual Studio, yükleme dizininizde bu temalar için XAML dosyalarını içerir. Bu dosyalar genellikle C:\Program Files\Microsoft Visual Studio\2022\<edition>\DesignTools\SystemThemes\wpf konumunda bulunur. Bu dosyalar tema yapısını anlamak için yararlıdır ancak çalışma zamanında kullanılmaz.
Modern Fluent temasını kullanma (.NET 9+)
.NET 9 ve üzeri için açık ve koyu modları destekleyen yeni Fluent temasını kullanabilirsiniz:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Alternatif olarak, daha basit bir tema uygulaması için özelliğini kullanabilirsiniz ThemeMode :
<Application x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
ThemeMode="System">
</Application>
Ayrıca bakınız
.NET Desktop feedback