2009-02-06 9 views
5

estoy leyendo Silverlight 2 Unleashed, publicado en octubre de 2008 y tiene ejemplos en que con una etiqueta canvas raíz:¿La etiqueta raíz de Silverlight debe ser UserControl o Canvas?

<Canvas xmlns="http://schemas.microsoft.com/client/2007" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Background="Red" 
    Width="500" 
    Height="300"> 
     <Ellipse Width="400"... 

Sin embargo, cuando se crea una nueva aplicación de Silverlight en VS2008, me sale una etiqueta raíz UserControl :

<UserControl x:Class="TestFirst.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300"> 
    <Grid x:Name="LayoutRoot" Background="White"... 

por supuesto que puede cambiar esto mediante la sustitución de la etiqueta de raíz con la lona, ​​pero luego tengo que cambiar también el código detrás de heredar de lienzo en lugar de control de usuario y tiene que tomar a cabo el método InitializeComponent.

  • ¿Está utilizando la etiqueta Canvas como estándar raíz o está el libro sobre una forma alternativa de crear aplicaciones Silverlight?
  • ¿Cuáles son las ventajas de utilizar Canvas en lugar de UserControl como elemento raíz?
  • ¿Por qué el libro de sus primeros ejemplos crearía aplicaciones Silverlight de una manera diferente a la que se da por defecto en Visual Studio?
  • ¿Hay alguna manera de tener una etiqueta canvas generada como la etiqueta raíz de forma predeterminada en Visual Studio?

Respuesta

4

Fuera de contexto, utilizar un lienzo como raíz en un documento XAML puede parecer extraño. Sin embargo, en el libro, esto se usa cuando demostramos las primeras muestras de XAML en una herramienta en línea llamada SilverlightPad. En ese caso, no hay código detrás, solo XAML, por lo tanto, no necesita cambiar nada en un archivo de clase (ya que no hay ninguno).

El punto es que cualquier elemento XAML se puede utilizar como la raíz de un documento XAML. Lo que hace Visual Studio al crear una raíz UserControl XAML y vincularlo a una clase UserControl en el código subyacente es realmente un caso especial de un esquema más general. Estoy de acuerdo en que es a lo que el lector se enfrentará la mayor parte del tiempo, pero también creo en el valor de mostrar que las cosas pueden ser diferentes. Además, también es importante mostrar que, a veces, no hay código detrás, y que XAML es un lenguaje con múltiples características incluso sin la "ayuda" de un código detrás de la clase.

Silverlight 2 Unleashed utiliza una progresión que comienza desde prácticamente cero y con una curva de aprendizaje (bastante empinada). Si continúas leyendo, verás que comenzamos a usar Visual Studio un poco más adelante en el libro, y las cosas se volverán más familiares.Sin embargo, habrás visto que puedes usar otros elementos como raíz, y creo que esto tiene un valor educativo.

Si tiene alguna otra pregunta, no dude en publicarla aquí o enviarme un correo electrónico.

Saludos, Laurent

+0

Hola Laurent, he escuchado a su podcast en DeveloperFusion así que sabía que eras uno de los primeros de Silverlight y pensé que la etiqueta canvas podría ser una reliquia de Silverlight 1, así que gracias por esta retroalimentación , Me gustan las formas no tradicionales, también su idea de escritorio de Silverlight vía .hta, mantenga las ideas próximas –

0

Creo que el libro probablemente hizo cosas mal. Los libros tienden a hacer eso, en realidad.

Normalmente, su control de usuario debe tener UserControl como su raíz. Si solo necesita un Lienzo para el dibujo de posición de coordenadas para todo el control, coloque el lienzo como el primer elemento secundario de UserControl. [Editar:] En su segundo ejemplo, reemplace la Cuadrícula con un lienzo, pero nuevamente, ¡solo si realmente necesita lienzo!

El lienzo es un panel de alcance muy estrecho; es explícitamente para el dibujo posicional de coordenadas, y no debe usarse para nada que no sea este. Si está haciendo un control de entrada de cualquier tipo, use una combinación de Grids, DockPanels y/o StackPanels. Y tal vez incluso Canvases para pequeñas animaciones ingeniosas cerca de tus TextBoxes. :)

El punto es que debe reducir su alcance. Si comienzas con un Lienzo para cualquier cosa, terminarás sufriendo al tratar de manejar todo el complejo posicionamiento de tus controles.

Cuestiones relacionadas