WPF Eklentilerine Genel Bakış
Bu .NET Framework, geliştiricilerin eklenti genişletilebilirliğini destekleyen uygulamalar oluşturmak için kullanabileceği bir eklenti modeli içerir. Bu eklenti modeli, uygulama işlevselliğini tümleştiren ve genişleten eklentilerin oluşturulmasına olanak sağlar. Bazı senaryolarda, uygulamaların eklentiler tarafından sağlanan kullanıcı arabirimlerini de görüntülemesi gerekir. Bu konu başlığında WPF'nin bu .NET Framework, arkasındaki mimariyi, avantajlarını ve sınırlamalarını etkinleştirmek için eklenti modelini nasıl geliştirtiği açıklanmıştır.
Önkoşullar
Eklenti .NET Framework tanıma gereklidir. Daha fazla bilgi için bkz. Eklentiler ve Genişletilebilirlik.
Add-Ins Genel Bakış
Uygulamalar, uygulama yeniden derleme ve yeniden derlemenin karmaşıklıklarından kaçınmak için, uygulamalar geliştiricilerin (hem birinci taraf hem de üçüncü taraf) kendileriyle tümleştirilen başka uygulamalar oluşturmasına olanak sağlayan genişletilebilirlik mekanizmalarını uygulamaya almaktadır. Bu tür genişletilebilirliği desteklemenin en yaygın yolu, eklentilerin ("eklentiler" ve "eklentiler" olarak da bilinir) kullanımıdır. Eklentilerle genişletilebilirliği ortaya çıkaran gerçek dünya uygulamalarına örnekler şunlardır:
Internet Explorer eklentileri.
Windows Media Player eklentileri.
Visual Studio eklentileri seçin.
Örneğin, Windows Media Player eklenti modeli üçüncü taraf geliştiricilerin Windows Media Player'yi çeşitli yollarla genişleten "eklentileri" uygulamasına olanak tanır. Bunlar arasında Windows Media Player tarafından yerel olarak desteklenen medya biçimleri için kod çözücüler ve kodlayıcılar oluşturma da dahil olmak üzere, ses etkileri ve deriler yer almaktadır. Tüm eklenti modellerinde ortak olan çeşitli varlıklar ve davranışlar olsa da, her eklenti modeli bir uygulama için benzersiz olan işlevselliği ortaya çıkarmak için yerleşiktir.
Tipik eklenti genişletilebilirlik çözümlerinin üç ana varlığı sözleşmeler, eklentiler ve konak uygulamalarıdır. Sözleşmeler, eklentilerin konak uygulamalarla nasıl tümleştirildiklerini iki şekilde tanımlar:
Eklentiler, konak uygulamalar tarafından uygulanan işlevlerle tümleştirilmiştir.
Konak uygulamaları, eklentilerin tümleştirileri için işlevselliği ortaya çıkarır.
Eklentilerin kullanılası için konak uygulamaların bunları bulmaları ve çalışma zamanında yüklemeleri gerekir. Sonuç olarak, eklentileri destekleyen uygulamalar aşağıdaki ek sorumluluklara sahiptir:
Bulma: Konak uygulamalar tarafından desteklenen sözleşmelere uygun eklentileri bulma.
Etkinleştirme: Eklentilerle yükleme, çalıştırma ve iletişim kurma.
Yalıtım: Uygulamaları eklentilerle ilgili olası güvenlik ve yürütme sorunlarından koruyan yalıtım sınırları kurmak için uygulama etki alanlarını veya işlemleri kullanma.
İletişim: Metotları çağırarak ve veri ileterek eklentilerin ve konak uygulamaların yalıtım sınırları içinde birbirleriyle iletişim kurmasına izin verme.
Yaşam Süresi Yönetimi: Uygulama etki alanlarını ve işlemlerini temiz, tahmin edilebilir bir şekilde yükleme ve kaldırma (bkz. Uygulama Etki Alanları).
Sürüm Oluşturma: Konak uygulamaların ve eklentilerin yeni sürümleri oluşturulduğunda da iletişim kuramalarını sağlama.
Sonuç olarak, sağlam bir eklenti modeli geliştirmek önemsiz olmayan bir girişimdir. Bu nedenle .NET Framework modelleri için bir altyapı sağlar.
Not
Eklentiler hakkında daha ayrıntılı bilgi için bkz. Eklentiler ve Genişletilebilirlik.
.NET Framework Add-In Modeline Genel Bakış
Ad .NET Framework bulunan eklenti modeli, eklenti genişletilebilirliği geliştirmeyi basitleştirmek için tasarlanmış bir System.AddIn tür kümesi içerir. Eklenti modelinin .NET Framework birimi, bir konak uygulamanın ve eklentinin birbirleriyle nasıl iletişim kuracaklarını tanımlayan sözleşmedir. Sözleşme, sözleşmenin ana bilgisayar uygulamasına özgü bir görünümü kullanılarak bir konak uygulamasına açık olur. Benzer şekilde, eklentiye sözleşmenin eklentiye özgü bir görünümü de ortaya çıkar. Bağdaştırıcı, bir konak uygulamanın ve eklentinin sözleşmenin ilgili görünümleri arasında iletişim kurmasına izin vermek için kullanılır. Sözleşmeler, görünümler ve bağdaştırıcılar segmentler olarak adlandırılır ve bir dizi ilgili segment bir işlem hattı oluşturur. Pipelines eklenti modelinin bulma, .NET Framework, güvenlik yalıtımı, yürütme yalıtımı (hem uygulama etki alanlarını hem de işlemleri kullanarak), iletişimi, yaşam süresi yönetimini ve sürümleleştirmeyi desteklediği temeldir.
Bu desteğin toplamı, geliştiricilerin bir konak uygulamanın işlevselliğiyle tümleştirilen eklentiler oluşturmalarını sağlar. Ancak bazı senaryolar, konak uygulamalarının eklentiler tarafından sağlanan kullanıcı arabirimlerini görüntülemelerini gerektirir. .NET Framework'daki her sunu teknolojisi kullanıcı arabirimlerini uygulamak için kendi modeline sahip olduğundan, .NET Framework eklenti modeli belirli bir sunu teknolojisini desteklemez. Bunun yerine WPF, .NET Framework kullanıcı arabirimi desteğiyle eklenti modelini genişlettir.
WPF Add-Ins
WPF, .NET Framework eklenti modeliyle birlikte, konak uygulamalarının eklentilerden kullanıcı arabirimlerini görüntülemesi gereken çok çeşitli senaryoları ele alamanıza olanak sağlar. Özellikle, bu senaryolar WPF tarafından aşağıdaki iki programlama modeliyle ele alınmaktadır:
Eklenti bir kullanıcı arabirimi döndürür. Eklenti, sözleşme tarafından tanımlanan yöntem çağrısı aracılığıyla konak uygulamaya bir kullanıcı arabirimi döndürür. Bu senaryo aşağıdaki durumlarda kullanılır:
Bir eklenti tarafından döndürülen kullanıcı arabiriminin görünümü, dinamik olarak oluşturulan raporlar gibi yalnızca çalışma zamanında var olan verilere veya koşullara bağlıdır.
Eklenti tarafından sağlanan hizmetler için kullanıcı arabirimi, eklentiyi kullananın konak uygulamaların kullanıcı arabiriminden farklıdır.
Eklenti öncelikli olarak konak uygulama için bir hizmet gerçekleştirir ve kullanıcı arabirimi ile konak uygulamaya durumu raporlar.
Eklenti bir kullanıcı arabirimidir. Eklenti, sözleşme tarafından tanımlanan bir kullanıcı arabirimidir. Bu senaryo aşağıdaki durumlarda kullanılır:
Eklenti, görüntülenme dışında reklam gibi hizmetler sağlamaz.
Bir eklenti tarafından sağlanan hizmetler için kullanıcı arabirimi, hesap makinesi veya renk seçici gibi bu eklentiyi kullana tüm konak uygulamalar için ortaktır.
Bu senaryolar, kullanıcı arabirimi nesnelerinin konak uygulama ve eklenti uygulama etki alanları arasında geçirilene kadar gerçekleşmesini gerektirir. Eklenti .NET Framework, uygulama etki alanları arasında iletişim kurmak için iletişime bağlı olduğu için aralarında geçirilen nesnelerin iletişim kurabilirsiniz olması gerekir.
Motable nesnesi, aşağıdakilerden birini veya daha fazlasını gerçekleştiren bir sınıfın örneğidir:
sınıfından MarshalByRefObject türetildi.
Arabirimini ISerializable uygulama.
özniteliği SerializableAttribute uygulanmıştır.
Not
Nesneleri yenidenmotable nesneleri oluşturma hakkında daha fazla .NET Framework için, bkz. Making Objects Remotable.
WPF kullanıcı arabirimi türleri yeniden kullanılabilir değildir. Sorunu çözmek için WPF, eklentiler tarafından .NET Framework WPF kullanıcı arabiriminin konak uygulamalardan görüntülenebilir olması için eklenti modelini genişletmektedir. Bu destek WPF tarafından iki tür tarafından sağlanır: arabirimi ve sınıfı tarafından INativeHandleContract uygulanan iki FrameworkElementAdapters statik ContractToViewAdapter yöntem: ve ViewToContractAdapter . Bu türler ve yöntemler yüksek düzeyde aşağıdaki şekilde kullanılır:
WPF, eklentiler tarafından sağlanan kullanıcı arabirimlerinin şekiller, denetimler, kullanıcı denetimleri, düzen panelleri ve sayfalar gibi doğrudan veya dolaylı olarak 'den türeten sınıflar FrameworkElement olduğunu gerektirir.
Sözleşme, eklenti ile konak uygulama arasında bir kullanıcı arabirimi geçir yapılacağını bildirse de, bu kullanıcı arabiriminin bir (değil) olarak bildir edilmesi gerekir; yalıtım sınırları boyunca geçirilene eklenti kullanıcı arabiriminin uzamayan bir INativeHandleContract FrameworkElement INativeHandleContract gösterimidir.
Eklentinin uygulama etki alanından geçirimeden önce , FrameworkElement çağrılarak bir INativeHandleContract olarak ViewToContractAdapter paketlenmiştir.
Konak uygulamanın uygulama etki alanına geçirildikten sonra çağrısıyla bir INativeHandleContract olarak yeniden paket FrameworkElement ContractToViewAdapter gerekir.
INativeHandleContract, ContractToViewAdapter ve 'nin ViewToContractAdapter nasıl kullanıldıkları belirli bir senaryoya bağlıdır. Aşağıdaki bölümlerde, her programlama modeli için ayrıntılar sağlanmıştır.
Add-In Kullanıcı Arabirimi
Eklentinin bir konak uygulamaya kullanıcı arabirimini iade etmek için aşağıdakiler gereklidir:
Konak uygulaması, eklenti ve işlem hattı, .NET Framework ve Genişletilebilirlik belgelerinde açıklandığı gibi oluşturularak oluşturul gerekir.
Sözleşmenin bir kullanıcı arabirimini iade etmek için ve uygulaması gerekir, anlaşma türü dönüş IContract değerine sahip bir yöntem bildirebilir. INativeHandleContract
Eklenti ile konak uygulama arasında geçirilen kullanıcı arabiriminin doğrudan veya dolaylı olarak 'den türetmiş olması FrameworkElement gerekir.
Eklenti tarafından döndürülen kullanıcı arabirimi, yalıtım sınırını geçmeden önce bir kullanıcı FrameworkElement INativeHandleContract arabiriminden bir'e dönüştürülmesi gerekir.
Döndürülen kullanıcı arabirimi, yalıtım sınırını aştıktan INativeHandleContract sonra bir FrameworkElement kullanıcı arabiriminden bir'e dönüştürülmesi gerekir.
Konak uygulaması döndürülen 'yi FrameworkElement görüntüler.
Kullanıcı arabirimi döndüren bir eklentinin nasıl uygulandığını gösteren bir örnek için, bkz. Create an Add-In That Returns a UI.
Add-In Bir Kullanıcı Arabirimi
Eklenti bir kullanıcı arabirimi olduğunda aşağıdakiler gereklidir:
Konak uygulaması, eklenti ve işlem hattı, .NET Framework ve Genişletilebilirlik belgelerinde açıklandığı gibi oluşturularak oluşturul gerekir.
Eklentinin sözleşme arabiriminin uygulaması INativeHandleContract gerekir.
Konak uygulamaya geçirilen eklentinin doğrudan veya dolaylı olarak 'den türetmiş olması FrameworkElement gerekir.
Eklenti, yalıtım sınırını geçmeden önce bir FrameworkElement INativeHandleContract 'den 'ye dönüştürülmesi gerekir.
Eklenti, yalıtım sınırını aştıktan sonra bir INativeHandleContract FrameworkElement 'den 'ye dönüştürülmesi gerekir.
Konak uygulaması döndürülen 'yi FrameworkElement görüntüler.
Kullanıcı arabirimi olan bir eklentinin nasıl uygulandığını gösteren bir örnek için, bkz. Create an Add-In That Is a UI.
Bir Add-In'den Birden Çok KULLANıCı Add-In
Eklentiler genellikle konak uygulamaların görüntülemesi için birden çok kullanıcı arabirimi sağlar. Örneğin, konak uygulamaya durum bilgileri de sağlayan bir kullanıcı arabirimi olan bir eklentiyi de kullanıcı arabirimi olarak düşünebilirsiniz. Bunun gibi bir eklenti, hem Eklenti Bir Veri Döndürür hem de Eklenti Kullanıcı Arabirimi tekniklerinin bir birleşimi kullanılarak Kullanıcı Arabirimi kullanılabilir.
Add-Ins ve XAML Tarayıcı Uygulamaları
Şu ana kadarki örneklerde ana bilgisayar uygulaması, yüklü bir tek başına uygulamadır. Ancak XAML tarayıcı uygulamaları (XBAP'ler), aşağıdaki ek derleme ve uygulama gereksinimleriyle birlikte eklentileri de barındırabilirsiniz:
XBAP uygulama bildirimi, işlem hattını (klasörler ve derlemeler) ve eklenti derlemesini istemci makinedeki ClickOnce uygulama önbelleğine, XBAP ile aynı klasörde indirmek için özel olarak yapılandırılacak şekilde yapılandırılacaktır.
Eklentileri bulmak ve yüklemek için XBAP kodu, işlem hattı ClickOnce eklenti konumu olarak XBAP için ClickOnce uygulama önbelleğini kullan gerekir.
Eklenti kaynak sitede bulunan gevşek dosyalara başvurursa XBAP eklentiyi özel bir güvenlik bağlamına yüklemeli; , XBAP'ler tarafından barındırılıyorsa, eklentiler yalnızca konak uygulamanın kaynak sitesinde bulunan gevşek dosyalara başvurur.
Bu görevler aşağıdaki alt bölümlerde ayrıntılı olarak açıklanmıştır.
İşlem Hattı ve Dağıtım Add-In yapılandırma ClickOnce yapılandırma
XBAP'ler dağıtım önbelleğinde güvenli bir klasöre indirilir ClickOnce klasörden çalıştırabilirsiniz. XBAP'nin eklenti barındırması için işlem hattı ve eklenti derlemesi de güvenli klasöre indirilsin. Bunu başarmak için, uygulama bildirimini indirme için hem işlem hattını hem de eklenti derlemesini içerecek şekilde yapılandırmalısiniz. İşlem hattı derlemelerini algılamak Visual Studio işlem hattı ve eklenti derlemelerinin konak XBAP projesinin kök klasöründe olması gerekse de bu işlem Visual Studio kolayca yapılır.
Sonuç olarak, ilk adım her işlem hattı derlemesi ve eklenti derleme projelerinin derleme çıktısını ayarerek XBAP projesinin köküne işlem hattını ve eklenti derlemesini derlemektir. Aşağıdaki tabloda, konak XBAP projesiyle aynı çözümde ve kök klasörde yer alan işlem hattı derleme projeleri ve eklenti derleme projesi için derleme çıkış yolları gösterir.
Tablo 1: XBAP Tarafından Barındırılan İşlem Hattı Derlemeleri için Çıkış Yolları Oluşturma
| İşlem hattı derleme projesi | Derleme çıkış yolu |
|---|---|
| Anlaşma | ..\HostXBAP\Contracts\ |
| Add-In Görünümü | ..\HostXBAP\AddInViews\ |
| Add-In-Side Adapter | ..\HostXBAP\AddInSideAdapters\ |
| Host-Side Bağdaştırıcısı | ..\HostXBAP\HostSideAdapters\ |
| Add-In | ..\HostXBAP\AddIns\WPFAddIn1 |
Sonraki adım, aşağıdakini yaparak işlem hattı derlemelerini ve eklenti derlemelerini Visual Studio olarak belirtmektir:
projesinde her bir işlem hattı klasörüne sağ tıklar ve Çözüm Gezgini ekle'yi seçerek işlem hattı ve eklenti derlemesini projeye Project.
Özellikler penceresinden her işlem hattı derlemesi ve eklenti derlemesi Derleme Eylemi'nin İçerik olarak ayarlandı.
Son adım, uygulama bildirimini işlem hattı derleme dosyalarını ve eklenti derleme dosyasını indirmek üzere içerecek şekilde yapılandırmaktır. Dosyalar, XBAP uygulamasının kapladığı önbellekte ClickOnce klasör kökünde yer alıyor olması gerekir. Yapılandırma aşağıdaki Visual Studio gerçekleştirerek elde edilebilir:
XBAP projesine sağ tıklayın, Özellikler'e tıklayın, Yayımla'ya tıklayın ve ardından Uygulama Dosyaları düğmesine tıklayın.
Uygulama Dosyaları iletişim kutusunda, her işlem hattının Yayımlama Durumu ve eklenti DLL'si'ni Dahil (Otomatik) olarak ayarlayın ve her işlem hattı ve eklenti DLL'si için İndirme Grubunu (Gerekli) olarak ayarlayın.
İşlem Hattını ve Add-In TemelDenEylemlerini Kullanma
İşlem hattı ve eklenti, dağıtım ClickOnce yapılandırıldığında, XBAP ile aynı ClickOnce önbellek klasörüne indirilir. İşlem hattını ve XBAP'den eklentiyi kullanmak için XBAP kodunun bunları uygulama tabanından al olması gerekir. İşlem hatlarını ve eklentileri kullanmak .NET Framework eklenti modelinin çeşitli türleri ve üyeleri bu senaryo için özel destek sağlar. İlk olarak yol, ApplicationBase numaralama değeriyle tanımlanır. Bu değeri, aşağıdakileri içeren işlem hatlarını kullanmak için ilgili eklenti üyelerinin aşırı yüklemeleriyle kullanırsanız:
Ana Bilgisayar Kaynağı Sitesine Erişme
Bir eklentinin kaynak sitedeki dosyalara başvura olduğundan emin olmak için, eklentinin konak uygulamaya eşdeğer bir güvenlik yalıtımıyla yüklenmiş olması gerekir. Bu güvenlik düzeyi, AddInSecurityLevel.Host numaralama değeriyle tanımlanır ve bir eklenti Activate etkinleştirildiğinde yöntemine geçirilebilir.
WPF Add-In Mimarisi
Daha önce de en üst düzeyde, WPF, .NET Framework ve kullanarak kullanıcı arabirimleri (doğrudan veya dolaylı olarak ' den türetilen) uygulamasına FrameworkElement INativeHandleContract olanak ViewToContractAdapter ContractToViewAdapter sağlar. Sonuç olarak konak uygulama, konak uygulamanın FrameworkElement kullanıcı arabiriminden görüntülenen bir döndürülür.
Basit kullanıcı arabirimi eklenti senaryolarında bu, bir geliştiricinin ihtiyaçlarında olduğu kadar ayrıntıdır. Daha karmaşık senaryolarda, özellikle düzen, kaynaklar ve veri bağlama gibi ek WPF hizmetlerini kullananlar için, WPF'nin avantajlarını ve sınırlamalarını anlamak için KULLANıCı arabirimi desteğiyle .NET Framework eklenti modelini genişletme konusunda daha ayrıntılı bilgi sahibi olmak gerekir.
Temel olarak, WPF bir eklentiden konak uygulamaya kullanıcı arabirimini iletir; Bunun yerine WPF, WPF birlikte çalışabilirliği kullanarak kullanıcı arabirimi için Win32 pencere tanıtıcısı iletir. Bu nedenle, bir eklentiden bir kullanıcı arabirimi bir konak uygulamasına geçir olduğunda, aşağıdakiler gerçekleşir:
Eklenti tarafında, WPF ana bilgisayar uygulaması tarafından görüntülenecek kullanıcı arabirimi için bir pencere tanıtıcısı ediner. Pencere tanıtıcısı, 'den türeten ve uygulayan bir iç WPF sınıfı HwndSource tarafından INativeHandleContract kapsüller. Bu sınıfın bir örneği tarafından döndürülür ve eklentinin uygulama etki alanından konak uygulamanın ViewToContractAdapter uygulama etki alanına sıralandı.
Konak uygulama tarafında, WPF, 'den türeten ve tüketen bir iç HwndSource WPF sınıfı HwndHost olarak yeniden INativeHandleContract paketler. Bu sınıfın bir örneği tarafından konak ContractToViewAdapter uygulamaya döndürülür.
HwndHost , WPF kullanıcı arabirimlerinden pencere tanıtıcıları tarafından tanımlanan kullanıcı arabirimlerini görüntülemek için vardır. Daha fazla bilgi için bkz. WPF ve Win32 Birlikte Çalışabilirliği.
Özet olarak, , ve , bir WPF kullanıcı arabiriminin pencere tanıtıcısı için bir eklentiden konak uygulamasına geçirilemesine izin vermek için vardır; burada bir tarafından kapsüllendi ve konak uygulamanın kullanıcı INativeHandleContract ViewToContractAdapter arabirimi ContractToViewAdapter HwndHost görüntülenir.
Not
Konak uygulama bir alır, konak uygulaması tarafından döndürülen nesneyi eklenti (örneğin, bir ) tarafından uygulanan türe HwndHost ContractToViewAdapter UserControl dönüştürebilir.
Doğası gereği, HwndHost konak uygulamaların bunları nasıl kullanabileceğini etkileyen belirli sınırlamaları vardır. Ancak WPF, HwndHost eklenti senaryoları için çeşitli özelliklerle genişletildi. Bu avantajlar ve sınırlamalar aşağıda açıklanmıştır.
WPF Add-In Avantajları
WPF eklenti kullanıcı arabirimleri, 'den türetilen bir iç sınıf kullanılarak konak uygulamalardan görüntülendiğinden, bu kullanıcı arabirimleri düzen, işleme, veri bağlama, stiller, şablonlar ve kaynaklar gibi WPF UI hizmetleriyle ilgili özellikleriyle HwndHost HwndHost kısıtlanmış olur. Ancak WPF, iç alt HwndHost sınıfını aşağıdakileri içeren ek özelliklerle genişlettir:
Bir konak uygulamanın kullanıcı arabirimi ile eklentinin kullanıcı arabirimi arasında sekme. "Eklenti bir kullanıcı arabirimidir" programlama modelinin, eklentinin tam olarak güvenilir veya kısmen güvenilir olup olmadığını, tabbing'i etkinleştirmek için eklenti yan bağdaştırıcısının geçersiz kılınarak gerekli olduğunu QueryContract unutmayın.
Konak uygulama kullanıcı arabirimlerinden görüntülenen eklenti kullanıcı arabirimleri için erişilebilirlik gereksinimlerini karşılama.
WPF uygulamalarının birden çok uygulama etki alanı senaryosunda güvenli bir şekilde çalışmasına olanak sağlar.
Eklentiler güvenlik yalıtımıyla (yani kısmi güven güvenlik korumalı alanı) çalıştırıldıklarında eklenti kullanıcı arabirimi penceresine geçersiz erişimin önlenmesi. çağrısı ViewToContractAdapter şu güvenliği sağlar:
"Eklenti bir kullanıcı arabirimi döndürür" programlama modeli için, bir eklenti kullanıcı arabirimi için pencere tanıtıcısını yalıtım sınırından geçmenin tek yolu çağrısı ViewToContractAdapter yapmaktır.
"Eklenti bir kullanıcı arabirimidir" programlama modeli için, eklenti tarafı bağdaştırıcısında geçersiz kılınma ve ana bilgisayar tarafı bağdaştırıcısından eklenti yan bağdaştırıcısının uygulamasını çağırma gibi (önceki örneklerde gösterildiği gibi) çağrısı QueryContract ViewToContractAdapter
QueryContractgereklidir.
Birden çok uygulama etki alanı yürütme koruması sağlama. Uygulama etki alanlarıyla ilgili sınırlamalar nedeniyle, eklenti uygulama etki alanlarında meydana gelen işlanmamış özel durumlar, yalıtım sınırı mevcut olsa bile uygulamanın tamamının kilitlenmesini sağlar. Ancak WPF ve .NET Framework modeli, bu sorunu çözmek ve uygulama kararlılığını geliştirmek için basit bir yol sağlar. Ana bilgisayar uygulaması bir WPF uygulaması ise, kullanıcı arabirimini görüntüleyen bir WPF eklenti, uygulama etki alanının üzerinde çalıştır olduğu iş Dispatcher parçacığı için bir oluşturur. WPF eklentisinde olayı işerek uygulama etki alanında oluşan tüm işlanmamış özel UnhandledException durumları Dispatcher algıabilirsiniz. özelliğinden Dispatcher 'i CurrentDispatcher eldeabilirsiniz.
WPF Add-In Sınırlamaları
WPF'nin , ve pencere tanıtıcıları tarafından sağlanan varsayılan davranışlara ekleyen avantajların ötesinde, konak uygulamalardan görüntülenen eklenti kullanıcı arabirimleri için HwndSource HwndHost de sınırlamalar vardır:
Bir konak uygulamasından görüntülenen eklenti kullanıcı arabirimleri, konak uygulamanın kırpma davranışına saygı göstermez.
Birlikte çalışabilirlik senaryolarında hava alanı kavramı eklentiler için de geçerlidir (bkz. Teknoloji Bölgelerine Genel Bakış).
Kaynak devralma, veri bağlama ve komut gibi bir konak uygulamasının KULLANıCı Arabirimi hizmetleri eklenti kullanıcı arabirimleri için otomatik olarak kullanılamaz. Eklentiye bu hizmetleri sağlamak için işlem hattını güncelleştirmeniz gerekir.
Eklenti kullanıcı arabirimi bir dönüştürmeden döndürülemez, ölçeklendiremez, çarpıtamaz veya başka bir şekilde etkilenebilir (bkz. Dönüşümlere Genel Bakış).
Ad alanının çizim işlemleri tarafından işlenen eklenti kullanıcı arabirimleri içindeki içerik System.Drawing alfa karıştırma içerebilir. Ancak, hem eklenti kullanıcı arabirimi hem de bunu içeren konak uygulama kullanıcı arabirimi %100 opak olmalı; Diğer bir deyişle,
Opacityher iki özelliği de 1 olarak ayar gerekir.Eklenti kullanıcı arabirimi içeren konak uygulamasındaki bir pencerenin özelliği olarak ayarlanırsa AllowsTransparency
trueeklenti görünmez. Eklenti kullanıcı arabirimi %100 opak olsa bile (yani özelliğin değeri 1 olsaOpacitybile) bu durum doğrudur.Bir eklenti kullanıcı arabiriminin aynı üst düzey pencerede diğer WPF öğelerinin üzerinde görünmesi gerekir.
Bir eklentinin kullanıcı arabiriminin hiçbir bölümü kullanılarak iş VisualBrush kullanılamaz. Bunun yerine eklenti, sözleşme tarafından tanımlanan yöntemler kullanılarak konak uygulamaya geçirilen bir bit eşlem oluşturmak için oluşturulan kullanıcı arabiriminin anlık görüntüsünü alır.
Medya dosyaları, eklenti kullanıcı MediaElement arabiriminde bir kullanıcı arabiriminden çalınamaz.
Eklenti kullanıcı arabirimi için oluşturulan fare olayları konak uygulama tarafından alınmamıştır veya oluşturulmaz ve konak uygulama kullanıcı arabiriminin özelliği
IsMouseOverdeğerine sahipfalseolur.Odak, bir eklenti kullanıcı arabiriminde denetimler arasında kaydırıyorsa ve olayları konak uygulama
GotFocusLostFocustarafından alınmayacak veya yükseltilemez.Bir konak uygulamanın eklenti kullanıcı arabirimi içeren kısmı yazdırılırken beyaz görünür.
Konak uygulama yürütmeye devam ederse, eklenti kullanıcı arabirimi tarafından oluşturulan tüm dağıtıcılar (bkz. ) sahip eklentisini kaldırmadan önce el Dispatcher ile kapatılacaktır. Anlaşma, konak uygulamanın eklentinin yüklenmeden önce eklentiye sinyal göndermesine olanak sağlayan yöntemler uygulayarak eklenti kullanıcı arabiriminin dağıtıcılarını kapatmasına izin verir.
Eklenti kullanıcı arabirimi bir veya InkCanvas içeriyorsa InkCanvas eklentiyi kaldıramazsiniz.
Performans İyileştirme
Varsayılan olarak, birden çok uygulama etki alanı .NET Framework her uygulama için gerekli olan çeşitli derlemeler bu uygulamanın etki alanına yüklenir. Sonuç olarak, yeni uygulama etki alanları oluşturmak ve bu etki alanlarında uygulama başlatma için gereken süre performansı etkileyebilir. Ancak, .NET Framework, uygulamaların zaten yüklenmişse derlemeleri uygulama etki alanları arasında paylaşmasını talimatını kullanarak başlangıç sürelerini azaltmanız için bir yol sağlar. Bunu yapmak için giriş noktası yöntemine ( ) uygulanması gereken LoaderOptimizationAttribute özniteliğini Main kullanırsınız. Bu durumda, uygulama tanımınızı uygulamak için yalnızca kod kullanabilirsiniz (bkz. Uygulama Yönetimine Genel Bakış).