2010-04-16 22 views
9

UserControl'üm bir bindirme efekti eklemeyi deniyorum ve WPF'de kullanılan adrelerin bu olduğunu biliyorum. Ama sözde çalıştıkları hakkında biraz kafam karıştı. Adorner katmanın WPF çalışma zamanı tarafından örtük olarak ele alındığını ve bu nedenle her zaman erişilebilir olması gerektiğini düşündüm.WPF adorner katmanı ne zaman kullanılabilir hale gelir?

Ancak, UserControl'ün bir örneğini kodda oluşturduğumda, orada adorner katman yoktur. olacak bu iş nasıl,

var view = new MyUserControl(); 
var target = view.GetAdornerTarget(); // This returns a specific UI control. 
var layer = AdornerLayer.GetAdornerLayer(target); 
if (layer == null) 
{ 
    throw new Exception("No adorner layer at the moment."); 
} 

Birisi bana açıklayabilir misiniz: Aşağıdaki kod durumla başarısız? Önce UserControl örneğini en üst düzey bir Pencereye yerleştirmem gerekiyor mu? Ya da tabakayı bir şekilde tanımlamam gerekiyor mu? Belgelerin içinden geçmek beni hiçbir yere götürmedi.

Teşekkür ederiz!

cevap

16

AdornerLayer, AdornerDecorator ve ScrollContentPresenter sınıfları tarafından oluşturulur. Görsel ağacında bu sınıflardan hiçbiri, ebeveynlerin sizin kontrolünüzde yoksa, o zaman ilgili bir AdornerLayer'a sahip olmayacaktır.

Sen UserControl bir AdornerDecorator ekleyebilir, ama bu senin Adorners sadece UserControl torunları kontrollerin üstünde olmasını sağlayacaktır. Eğer o zaman AdornerLayer almalısınız, bir Pencere UserControl eklerseniz böylece

Pencere için varsayılan ControlTemplate, bir AdornerDecorator içerir.

0

Her şey, kodu nerede aradığınıza ve denetimin bulunduğu yere bağlıdır. Sağladığınız durumda, denetim henüz InitializeComponent() yöntemi ile başlatılmadı. Denetimi, görünümlerinizden birinde bir yere yerleştirmeniz veya AdornerLayer'ı çekebilmek için XAML'de önceden bildirmeniz gerekir.

İlgili konular