2011-10-10 20 views
5

Para un diseño XAML dado que requiere un blanco semitransparente (para proporcionar un efecto de vidrio en este caso), qué método sería preferible establecer el transparencia y por qué ?:Rendimiento XAML: establece el canal alfa de un pincel frente a la opacidad de FrameworkElement

  1. Establezca el canal alfa del pincel. P.ej. #12FFFFFF
  2. Establezca la opacidad del FrameworkElement en sí, dejando el pincel como 100% blanco.

Además, ¿la respuesta es diferente entre WPF (4.0) y Silverlight?

+0

Desde MSDN [Documentation] (http://msdn.microsoft.com/en-us/library/bb613584.aspx#Opacity) – dowhilefor

Respuesta

6

Directamente desde MSDN:

Opacidad en cepillos frente a la opacidad de elementos

Cuando se utiliza un cepillo para ajustar el Relleno o Trazo de un elemento, es mejor fijar el cepillo .Opacidad del valor en lugar de la configuración de la propiedad Opacidad del elemento . La modificación de la propiedad Opacidad de un elemento puede provocar que WPF cree una superficie temporal.

Pero, independientemente, tenga en cuenta que todavía está causando que la tubería de representación haga más trabajo. La opacidad implica que debe combinar píxeles de múltiples fuentes para obtener el valor RGB final. Por lo tanto, si es posible eliminar la transparencia por completo y en su lugar simularla con un pincel opaco, debería hacerlo. Parece que eso puede no ser posible en su caso, pero a menudo puede serlo.

+0

Awrite kent;) –

+0

¡Saludos! Espero que todo esté bien en BC. –

+0

Sí hasta ahora bien –

0

que depende de la cantidad de objetos que se va a mostrar (del tipo anterior), ¿cómo se crea el cepillo etc ...

Por ejemplo, si el cepillo se encuentra en el primero como ejemplo StaticResource luego se crea una vez, mientras que si se establece como una cadena Background = "# 12FFFFFF", se creará una vez por instanciación del objeto. Solo tendrá un impacto en el rendimiento, aunque insignificante

Uso de pinceles. Blanco y opacidad de ajuste significa que utilizará una única instancia estática de un pincel (blanco) y una constante de opacidad para crear menos objetos.

La mejor manera de averiguarlo es una prueba específica: ¿ha realizado algún perfil?

Editar: Debo añadir que si solo está creando algunos de los objetos anteriores, no creo que deba preocuparse por el rendimiento. Para los 1000, sin embargo, una prueba específica sería acertada.

+0

Gracias. En este caso, es para un dibujo bastante complejo que contiene muchos objetos GeometryDrawing. Gracias por tu respuesta. –

+0

Creo que puede encontrar que se pueden lograr mejoras de rendimiento más significativas al usar la virtualización o al ajustar las primitivas que utiliza para procesar. ¿Has visto estos enlaces? http://stackoverflow.com/questions/7710569/best-performing-class-for-drawing-in-wpf/7711139#7711139 http://stackoverflow.com/questions/7560922/improving-canvas- rendimiento –

0

El establecimiento de la opacidad de un FrameworkElement establecerá la opacidad de cada niño de ese FrameworkElement. Si FrameworkElement debe tener elementos secundarios (botones, cuadros de texto o cualquier otro elemento) debe ir con la opción 1.

Si solo hay un rectángulo blanco superpuesto a algo, yo diría que vaya por la opción 2, porque es más fácil anima una propiedad de Opacidad que un pincel, en caso de que eventualmente quieras eso.

Cuestiones relacionadas