2010-05-30 17 views
11

aramadığını OnApplyTemplate. Kontrolü bir pencerede özel sekme denetimine ekledim ve bir şekilde OnApplyTemplate asla bu denetim için çağrılmıyor! Bu neden beklediğim gibi çalışmıyor?Bazı BÖLÜM kontrollerini kullanan bir özel denetimi var özel denetim

Ben senin yapıcı göremiyorum ama DefaultStyleKey ayarlamak unutmayın
+4

-1. – zneak

+6

İlk kez üye iseniz ve F kelimesini kullanıyorsunuz. Bu topluluğun yayınlamadan önce beğenip beğenmediğini görmeye çalışın. Dil için – vladv

+2

-1. –

cevap

3

: bu yazı takılmaları olabilir herkesten, ben aynı sorunu yaşıyordu için

DefaultStyleKeyProperty.OverrideMetadata(typeof(TitleBoxNew), new FrameworkPropertyMetadata(typeof(TitleBoxNew))); 
+0

i söylemeyi frogot Evet, zaten bu var: statik TitleBoxNew() { DefaultStyleKeyProperty.OverrideMetadata (typeof (TitleBoxNew), yeni FrameworkPropertyMetadata (typeof (TitleBoxNew))); } } public TitleBoxNew() { } –

+0

Güzel kaydırma stackoverflow, afiyetle yapılmış –

+10

Lütfen yapıcınızı içerecek şekilde orignal postunuzu düzenleyin; yorumlar kod için doğru nokta değildir. –

37

ve ben çözmek başardı benim özel denetimi içeren projenin AssemblyInfo.cs aşağıdaki ekleyerek o:

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
    //(used if a resource is not found in the page, 
    // or application resource dictionaries) 
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries) 
)] 

My denetimin şablon dosyası Tema bulunur/kontrol olarak aynı projede Generic.xaml.

+2

Bu, günümü kurtardı. Harfi harfine. Çok teşekkürler. –

+1

Bu, bazı WPF özel denetimlerini başlangıçta bir "WPF Özel Denetim Kitaplığı" olarak oluşturulmamış bir C# Sınıf Kitaplığı'na taşıdıktan sonra bu sorunu çözdü. BTW: Ayrıca, sınıf kütüphanesini bir "gerçek" WPF sınıf kütüphanesine yükseltmek için gerekli XML öğesini .csproj'a ekledim. – candritzky

20

Diğer iki cevap doğru ... ama tamamlanmadı. this post'a göre (ve bu sorunu çözme konusundaki deneyimlerim), kontrol etmeniz gereken 4 şey var: (bu nedenle, bu yazıdaki kod blokları, sayı veya tire kullansaydım biçimlendirilmiş olarak kalmazdı ... böylece harfler

A. Kontroller şablonu ve stilleri, projenizin kökünün Themes adlı bir klasörüne Generic.xaml dosyasında bulunmalıdır.

B. ad Generic.xaml

C. Set içinde kontrolün kurucusundaki tarzı anahtar doğru olduğundan emin olun. Ayrıca aşağıdakileri statik bir kurucuya yerleştirmeniz önerilir.

static YourControl() 
{ 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(YourControl), new FrameworkPropertyMetadata(typeof(YourControl))); 
} 

D. Aşağıdaki sağlayın AssemblyInfo.cs olduğunu

[assembly: ThemeInfo(ResourceDictionaryLocation.None, 
//where theme specific resource dictionaries are located 
//(used if a resource is not found in the  
// or application resource dictionaries) 
ResourceDictionaryLocation.SourceAssembly 
//where the generic resource dictionary is located 
//(used if a resource is not found in the page, 
// app, or any theme specific resource dictionaries) 
)] 
+0

Adım 'A' problemimi çözmek için yeterli oldu! ('uwp') – rubStackOverflow

1

Ben bazıları için bu sorunla mücadele edilmiş yukarıdaki gibi cevaplar hem eksik olduğu için kendi cevap eklemek için gidiyorum şimdi zamanı. Projenizin kökünün temaları adlı bir klasör dosya

A. kontrolleri şablon ve stilleri Generic.xaml bulunan edilmelidir: Yukarıdaki MoMo ve Kai G tarafından söylediği gibi

.

B. ad Generic.xaml

C. Set içinde kontrolün kurucusundaki tarzı anahtar doğru olduğundan emin olun. copy Etmeyin:

D. AssemblyInfo.cs

dosya ANCAK ayrıca Generic.xaml dosya Sayfası Olarak Yapı Eylem kurulmasını sağlamak için gereken tema nitelik olduğundan emin olun.

Bunu yapmazsanız veya değer bir şekilde bunun dışında bir şekilde ayarlanmışsa, OnApplyTemplate() yöntemi çağrılmayacaktır. @MoMo ait

+0

D Kısmı D özel bir önem taşır. –

1

Cevap doğru, ancak buna ek olarak:

E: Temalar/Generic.xaml projenizin kök olduğu tahmin edilmektedir. Eğer durum böyle değilse ve Generic.xaml kökünüzde değilse, rootda Generic.xaml ile bir temalar oluşturmanız gerekir (Generic.xaml sadece ResourceDictionary türündedir). Bu Generic.xaml dosyasında, Generic.xaml adresinizin bulunduğu yere başvurmanız gerekir.

ör .: sinirleniyorsun için

<ResourceDictionary Source="/Foo.Bar;component/Controls/FooControl/Themes/Generic.xaml" />

İlgili konular