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.
Şu anda etkin olan temaya bağlı olarak farklı kaynaklar alan ek sistem mantığıyla bir kaynağa başvuruyu değerlendirerek herhangi bir XAML özniteliği için bir değer sağlar. {StaticResource} işaretleme uzantısına benzer şekilde, kaynaklar resourceDictionary içinde tanımlanır ve ThemeResource kullanımı ResourceDictionary'de bu kaynağın anahtarına başvurur.
XAML öznitelik kullanımı
<object property="{ThemeResource key}" .../>
XAML değerleri
| Süre | Description |
|---|---|
| key | İstenen kaynağın anahtarı. Bu anahtar başlangıçta ResourceDictionary tarafından atanır. Kaynak anahtarı, XamlName Dilbilgisinde tanımlanan herhangi bir dize olabilir. |
Açıklamalar
ThemeResource, XAML kaynak sözlüğünde başka bir yerde tanımlanan bir XAML özniteliğinin değerlerini almak için kullanılan bir tekniktir. İşaretleme uzantısı {StaticResource} işaretleme uzantısıyla aynı temel amaca hizmet eder. Davranış ile {StaticResource} işaretleme uzantısı arasındaki fark , bir ThemeResource başvurusunun, sistem tarafından kullanılmakta olan temaya bağlı olarak birincil arama konumu olarak farklı sözlükleri dinamik olarak kullanabilmesidir.
Uygulama ilk kez başlatıldığında, ThemeResource başvurusu tarafından yapılan tüm kaynak başvuruları başlangıçta kullanımda olan temaya göre değerlendirilir. Ancak kullanıcı daha sonra çalışma zamanında etkin temayı değiştirirse, sistem her ThemeResource başvurusunu yeniden değerlendirir, farklı olabilecek temaya özgü bir kaynak alır ve uygulamayı görsel ağacındaki tüm uygun yerlerde yeni kaynak değerleriyle yeniden görüntüler. StaticResource, XAML yükleme zamanında / uygulama başlangıcında belirlenir ve çalışma zamanında yeniden değerlendirilmez. (XAML'yi dinamik olarak yeniden yükleyen görsel durumlar gibi başka teknikler de vardır, ancak bu teknikler {StaticResource} işaretleme uzantısı tarafından etkinleştirilen temel kaynak değerlendirmesinin daha yüksek bir düzeyde çalışır).
ThemeResource , istenen kaynağın anahtarını belirten bir bağımsız değişken alır. Kaynak anahtarı her zaman Windows Çalışma Zamanı XAML'deki bir dizedir. Kaynak anahtarının başlangıçta nasıl belirtildiği hakkında daha fazla bilgi için bkz. x:Key özniteliği.
Kaynakları tanımlama ve örnek kod dahil olmak üzere bir ResourceDictionary'i düzgün bir şekilde kullanma hakkında daha fazla bilgi için bkz. ResourceDictionary ve XAML kaynak başvuruları.
ÖnemliStaticResource'ta olduğu gibi, ThemeResource da XAML dosyasında sözcük temelli olarak daha fazla tanımlanmış bir kaynağa ileriye doğru başvuruda bulunmamalıdır. Bunu yapmaya çalışmak desteklenmez. İleriye doğru başvuru başarısız olmasa bile, bunu yapmaya çalışmak bir performans cezası taşır. En iyi sonuçları elde edebilmeniz için kaynak sözlüklerinizin bileşimini, ileriye doğru başvurulardan kaçınılması için ayarlayın.
Çözümlenemeyen bir anahtara ThemeResource belirtmeye çalışmak, çalışma zamanında bir XAML ayrıştırma istisnasına neden olur. Tasarım araçları ayrıca uyarılar veya hatalar da sunabilir.
Windows Çalışma Zamanı XAML işlemci uygulamasında ThemeResource için destek sınıfı gösterimi yoktur. Koddaki en yakın eşdeğer, Bir ResourceDictionary'nin koleksiyon API'sini kullanmaktır; örneğin Contains veya *TryGetValue çağrısı.
ThemeResource bir işaretleme uzantısıdır. İşaretleme uzantıları, genellikle öznitelik değerlerinin literal değerler veya işleyici adlarından farklı olması gerektiğinde ve bu gereksinim sadece belirli türlere veya özelliklere tür dönüştürücüleri koymaktan daha genel bir durum olduğunda uygulanır. XAML'deki tüm işaretleme uzantıları, öznitelik söz diziminde "{" ve "}" karakterlerini kullanır. Bu, XAML işlemcisinin işaretleme uzantısının özniteliği işlemesi gerektiğini kabul ettiği kuraldır.
{StaticResource} yerine {ThemeResource} ne zaman ve nasıl kullanılır?
ThemeResource'un kaynak sözlüğündeki bir öğeye çözümlediği kurallar genellikle StaticResource ile aynıdır. ThemeResource araması, Bir ThemeDictionaries koleksiyonunda başvuruda bulunılan ResourceDictionary dosyalarına genişletilebilir, ancak StaticResource bunu da yapabilir. Aradaki fark , ThemeResource'un çalışma zamanında yeniden değerlendirebileceği ve StaticResource'un değerlendiremeyecek olmasıdır.
Her tema sözlüğündeki anahtar kümesi, hangi tema etkin olursa olsun aynı anahtarlı kaynak kümesini sağlamalıdır. HighContrast tema sözlüğünde belirli bir anahtarlı kaynak varsa, bu ada sahip başka bir kaynak Da Light ve Default içinde bulunmalıdır. Bu doğru değilse, kullanıcı temaları değiştirdiğinde kaynak arama başarısız olabilir ve uygulamanız doğru görünmeyebilir. Bir tema sözlüğü, alt değerler sağlamak için yalnızca aynı kapsamdan başvurulabilen anahtarlı kaynaklar içerebilir; bunların tüm temalarda eşdeğer olması gerekmez.
Genel olarak, tema sözlüklerine kaynak yerleştirmeli ve themeResource kullanarak bu kaynaklara başvuruda bulunmanız gerekir, ancak bu değerler temalar arasında değişebiliyorsa veya değişen değerler tarafından destekleniyorsa. Bu, şu tür kaynaklar için uygundur:
- Fırçalar, özellikle SolidColorBrush için olmak üzere belirli renklerde. Bunlar, varsayılan XAML denetim şablonlarındaki (generic.xaml) ThemeResource kullanımlarının yaklaşık 80% oluşur.
- Kenarlıklar, uzaklıklar, kenar boşluğu ve doldurma vb. için piksel değerleri.
- FontFamily veya FontSize gibi yazı tipi özellikleri.
- Genellikle sistem stilinde olan ve GridViewItem ve ListViewItem gibi dinamik sunu için kullanılan sınırlı sayıda denetim için eksiksiz şablonlar.
- Metin görüntüleme stilleri (genellikle yazı tipi rengini, arka planını ve büyük olasılıkla boyutunu değiştirmek için).
Windows Çalışma Zamanı, ThemeResource tarafından başvurulmak üzere özel olarak tasarlanmış bir kaynak kümesi sağlar. Bunların tümü, Windows Yazılım Geliştirme Seti'nin (SDK) bir parçası olarak include/winrt/xaml/design klasöründe bulunan themeresources.xaml XAML dosyasının bir parçası olarak listelenir. Tema fırçaları ve themeresources.xaml dosyasında tanımlanan ek stiller hakkında belgeler için bkz. XAML tema kaynakları. Fırçalar, her fırçanın üç olası etkin temanın her biri için hangi renk değerine sahip olduğunu belirten bir tabloda belgelenmiştir.
Denetim şablonundaki görsel durumların XAML tanımları, tema değişikliği nedeniyle değişebilecek temel alınan bir kaynak olduğunda ThemeResource başvurularını kullanmalıdır. Sistem teması değişikliği genellikle görsel durum değişikliğine de neden olmaz. Kaynakların, değerlerin hala aktif görsel durum için yeniden değerlendirilebilmesi amacıyla bu durumda ThemeResource başvurularını kullanması gerekir. Örneğin, belirli bir kullanıcı arabirimi bölümünün ve özelliklerinden birinin fırça rengini değiştiren bir görsel durumunuz varsa ve bu fırça rengi tema başına farklıysa, bu özelliğin değerini varsayılan şablonda sağlamak için bir ThemeResource başvurusu ve ayrıca bu varsayılan şablonda yapılan tüm görsel durum değişiklikleri kullanmanız gerekir.
ThemeResource kullanımları bir dizi bağımlı değerde görülebilir. Örneğin, aynı zamanda anahtarlı bir kaynak olan bir Color değeri kullanan SolidColorBrush, bir ThemeResource başvurusu kullanabilir. Ancak anahtarlı SolidColorBrush kaynağını kullanan tüm kullanıcı arabirimi özellikleri bir ThemeResource başvurusu da kullanır, böylece tema değiştiğinde dinamik değer değişikliğini etkinleştiren her Fırça türü özelliğidir.
Not{ThemeResource} ve tema değiştirmede çalışma zamanı kaynak değerlendirmesi Windows 8.1 XAML'de desteklenir, ancak Windows 8'i hedefleyen uygulamalar için XAML'de desteklenmez.
Sistem kaynakları
Bazı tema kaynakları, temel alınan alt değer olarak sistem kaynak değerlerine başvurur. Sistem kaynağı, hiçbir XAML kaynak sözlüğünde bulunmayan özel bir kaynak değeridir. Bu değerler, değerleri sistemin kendisinden iletmek için Windows Çalışma Zamanı XAML desteğindeki davranışa dayanır ve bunları bir XAML kaynağının başvurabileceği bir biçimde temsil eder. Örneğin, RGB rengini temsil eden "SystemColorButtonFaceColor" adlı bir sistem kaynağı vardır. Bu renk, sistem renklerinin ve temalarının yalnızca Windows Çalışma Zamanı ve Windows Çalışma Zamanı uygulamalarına özgü olmayan yönlerinden gelir.
Sistem kaynakları genellikle yüksek karşıtlıklı temanın temel değerleridir. Kullanıcı, yüksek karşıtlık temalarının renk seçimlerini denetler ve bu seçimleri Windows Çalışma Zamanı uygulamalarına özgü olmayan sistem özelliklerini kullanarak yapar. Sistem kaynaklarına ThemeResource başvuruları olarak başvurarak, Windows Çalışma Zamanı uygulamaları için yüksek karşıtlıklı temaların varsayılan davranışı, kullanıcı tarafından denetlenen ve sistem tarafından kullanıma sunulan bu temaya özgü değerleri kullanabilir. Ayrıca, sistem bir çalışma zamanı teması değişikliği algılarsa referanslar yeniden değerlendirme için işaretlenir.
Örnek {ThemeResource} kullanımı
Aşağıda, ThemeResource'un nasıl kullanılacağını göstermek için varsayılan generic.xaml ve themeresources.xaml dosyalarından alınan bazı XAML örnekleri verilmiştir. Tema değişikliklerine yanıt vermek için yalnızca bir şablona (varsayılan Düğme) ve iki özelliğin nasıl bildirileceğine (Arka Plan ve Ön Plan) göz atacağız.
<!-- Default style for Windows.UI.Xaml.Controls.Button -->
<Style TargetType="Button">
<Setter Property="Background" Value="{ThemeResource ButtonBackgroundThemeBrush}" />
<Setter Property="Foreground" Value="{ThemeResource ButtonForegroundThemeBrush}"/>
...
Burada özellikler bir Brush değeri alır ve SolidColorBrush adlı ButtonBackgroundThemeBrush ve ButtonForegroundThemeBrush kaynaklarına başvuru ThemeResource kullanılarak yapılır.
Bu aynı özellikler, bir Düğmenin bazı görsel durumları tarafından da ayarlanır. Özellikle, bir düğmeye tıklandığında arka plan rengi değişir. Burada da görsel durum storyboard'undaki Arka Plan ve Ön Plan animasyonları, anahtar çerçeve değeri olarak ThemeResource'u kullanarak fırçalara atıfta bulunan DiscreteObjectKeyFrame nesnelerini kullanır.
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="Background">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedBackgroundThemeBrush}" />
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter"
Storyboard.TargetProperty="Foreground">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedForegroundThemeBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
Bu fırçaların her biri generic.xaml dosyasında daha önce tanımlanmıştır; bunları kullanan şablonlardan önce tanımlanması gerektiği için XAML ileriye dönük referanslardan kaçınılmıştır. "Varsayılan" tema sözlüğü için bu tanımlar aşağıdadır.
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Default">
...
<SolidColorBrush x:Key="ButtonBackgroundThemeBrush" Color="Transparent" />
<SolidColorBrush x:Key="ButtonForegroundThemeBrush" Color="#FFFFFFFF" />
...
<SolidColorBrush x:Key="ButtonPressedBackgroundThemeBrush" Color="#FFFFFFFF" />
<SolidColorBrush x:Key="ButtonPressedForegroundThemeBrush" Color="#FF000000" />
...
Ardından diğer tema sözlüklerinin her birinde de şu fırçalar tanımlanmıştır, örneğin:
<ResourceDictionary x:Key="HighContrast">
<!-- High Contrast theme resources -->
...
<SolidColorBrush x:Key="ButtonBackgroundThemeBrush" Color="{ThemeResource SystemColorButtonFaceColor}" />
<SolidColorBrush x:Key="ButtonForegroundThemeBrush" Color="{ThemeResource SystemColorButtonTextColor}" />
...
<SolidColorBrush x:Key="ButtonPressedBackgroundThemeBrush" Color="{ThemeResource SystemColorButtonTextColor}" />
<SolidColorBrush x:Key="ButtonPressedForegroundThemeBrush" Color="{ThemeResource SystemColorButtonFaceColor}" />
Burada Renk değeri, bir sistem kaynağına yapılan başka bir ThemeResource başvurusudur. Bir sistem kaynağına başvuruda bulunuyorsanız ve tema değişikliğine yanıt olarak değiştirilmesini istiyorsanız, başvuruyu yapmak için ThemeResource kullanmalısınız.
{ThemeResource} işaretleme uzantısı için tasarım zamanı araçları desteği
Bir XAML sayfasında {ThemeResource} işaretleme uzantısını kullandığınızda Microsoft Visual Studio, Microsoft IntelliSense açılan listelerine olası anahtar değerlerini içerebilir. Örneğin, "{ThemeResource" yazdığınız anda , XAML tema kaynaklarından kaynak anahtarlarından herhangi biri görüntülenir.
Bir kaynak anahtarı herhangi bir {ThemeResource} kullanımının parçası olarak mevcut olduğunda, Tanıma Git (F12) özelliği bu kaynağı çözebilir ve tema kaynağının tanımlandığı tasarım zamanı için generic.xaml değerini gösterebilir. Tema kaynakları birden çok kez tanımlandığından (tema başına) Tanıma Git sizi dosyada bulunan ve Varsayılan'ın tanımı olan ilk tanıma götürür. Diğer tanımları istiyorsanız, dosyanın içindeki anahtar adını arayabilir ve diğer temaların tanımlarını bulabilirsiniz.
İlgili konular
Windows developer