2010-04-16 23 views
9

Estoy tratando de agregar un efecto de superposición a mi UserControl y sé para eso se usan los adornos en WPF. Pero estoy un poco confundido acerca de cómo supuestamente funcionan. Pensé que la capa adorner está manejada implícitamente por el tiempo de ejecución de WPF, y como tal, siempre debería estar disponible.¿Cuándo aparece por primera vez una capa adornada de WPF?

Pero cuando creo una instancia de UserControl en el código, no hay ninguna capa adorner allí. El siguiente código falla con la excepción:

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."); 
} 

¿Puede alguien explicarme cómo se supone que funciona? ¿Debo primero colocar la instancia de UserControl en una ventana de nivel superior? ¿O necesito definir la capa de alguna manera? Excavar a través de la documentación no me llevó a ninguna parte.

¡Gracias!

Respuesta

16

El AdornerLayer es generado por las clases AdornerDecorator y ScrollContentPresenter. Si no hay ninguna de estas clases en el árbol visual que los padres controlan, entonces no tendrá un AdornerLayer asociado.

Se podría añadir un AdornerDecorator a su UserControl, sino que se asegurará de que su Adorners sólo están en la parte superior de los controles que son descendientes de la UserControl.

El valor por defecto para la ventana ControlTemplate incluye un AdornerDecorator, por lo que si se agrega el UserControl a una ventana, entonces se debe obtener la AdornerLayer.

0

Todo depende de dónde llame al código y dónde reside el control. En el caso que proporcionó, el control aún no se ha instanciado mediante el método InitializeComponent(). De hecho, tendrá que colocar el control en alguna de sus vistas o simplemente declararlo en XAML antes de poder extraer AdornerLayer.

Cuestiones relacionadas