2010-03-17 9 views
6

He jugado con el WPF Popup Control y, hasta donde puedo ver, la propiedad Visibilidad es superflua.¿Diferencia entre las propiedades IsOpen y Visibilidad de Popup?

Si tiene un Popup con IsOpen = True, será visible incluso si su visibilidad = colapsó.

Si tiene una ventana emergente con IsOpen = False, su Visibilidad se colapsará, y seguirá "Contraída" cuando IsOpen cambie a verdadero, y aparecerá. (es decir, tendrá algo que aparezca en la pantalla, aunque Snoop diga Colapsar).

¿Por qué el control Popup tiene ambas propiedades? ¿Me estoy perdiendo de algo?

Respuesta

2

Creo que tienes razón ... es bastante superfluo. Creo que el problema es que la propiedad Visibility se hereda de UIElement y podría interpretarse como "Debería tener una representación visual normal".

Dado que Popup no tiene ninguna representación visual en su "estado predeterminado ... es decir: cuando está cerrado, la propiedad no significa mucho. IsOpen, sin embargo, es más una propiedad basada en el comportamiento ... es decir: "¿Se debe permitir que un usuario interactúe con mis contenidos normalmente ocultos?". O tal vez estoy justificando el trabajo de Microsoft, aquí.

Al final del día, cualquier cosa que tenga una representación de UI hereda de UIElement y por lo tanto, obtiene la propiedad Visibility ... incluso en los casos en que no significa nada.

+0

@Ben Von Handorf: "... cualquier cosa que tenga una representación de IU hereda de UIElement y, por lo tanto, obtiene la propiedad Visibilidad ... incluso en los casos en los que no significa nada". En otras palabras, puedo esperar encontrar un buen número de propiedades que son inútiles, solo porque son heredadas. – cfouche

+0

No creo que muchos de ellos sean inútiles, pero siempre es posible. Este caso es algo extraño, ya que si reutilizaran Visibility significa 'Open' que sorprendería a la mayoría de los desarrolladores. Esto más un caso de excepción desde Popup no tiene una representación visual "normal", mientras que casi todo lo demás que hereda de 'UIElement' lo hace (no puedo pensar en otro contraejemplo fuera de mi cabeza). –

0

MSDN proporciona un medio completo y un propósito para ambos.

Popup.IsOpen - Obtiene o establece un valor que indica si la ventana emergente está visible.

Popup.Visibility - Obtiene o establece la visibilidad de la interfaz de usuario (UI) de este elemento. Se hereda de UIElement.

+1

Sí, leí esas dos descripciones antes de publicar la pregunta. La descripción de Popup.Visibility dice "Obtiene o establece la visibilidad de la interfaz de usuario (UI) de este elemento". Pero eso es exactamente lo que sucede, no es así. – cfouche

Cuestiones relacionadas