2009-05-10 23 views
11

Soy nuevo en la programación .NET, y trato de aprender Silverlight 2/C#.Cómo compartir una constante numérica entre xaml y C# en silverlight

Necesito declarar las constantes numéricas (o mejor aún, las variables de solo lectura), y acceder a ellas tanto en XAML como en mi archivo C# de código subyacente.

Estos valores se definen más apropiadamente en XAML, pero si la definición debe hacerse en C#, es mejor que codificar el valor en varios lugares.

Encontré una solución para WPF XAML, pero aparentemente Silverlight no admite la sintaxis (y la solución que encontré requería que las definiciones estuvieran en el archivo C#).

TIA!

Responder a Michael

estoy añadiendo esta respuesta como un comentario a mi pregunta original debido a que el editor de comentarios no me permite a añadir a la cantidad de texto y no pude encontrar otra manera de responder a tu respuesta

Gracias por la respuesta, Michael, pero parece que no puedo hacerlo funcionar.

Estoy empezando con un ejemplo de "Pro Silverlight 2 in C# 2008". El ejemplo funciona bien, pero requiere que codifique los mismos dos valores en dos lugares en mi XAML, y un lugar en mi C#.

Implementé su solución, y todo funcionó bien, pero cuando traté de ejecutar el código, recibí un error de página en el navegador. Eliminé todos los cambios y verifiqué que las cosas volvieron a funcionar bien.

Luego agregué la declaración xmlns: sys y sys: declaración Int32 a mi archivo App.xaml. Todo volvió a funcionar bien, pero cuando traté de ver el archivo Page.xaml en VS2008, recibí un extraño error:

prefijo no declarado [Línea: 6 Posición: 30] - Page.xmal, Línea 1, Columna 1

La página de vista previa estaba en blanco.

No había nada interesante en la Línea 6, Col 30 de Page.xaml, pero en el archivo App.xaml, que contiene la ubicación del cierre “>” inmediatamente antes del valor entero de 8:

<sys:Int32 x:Key="QAPS">8</sys:Int32> 

Si Presioné F5, sin embargo, la aplicación funciona bien en el navegador.

Estoy ejecutando VS2008 SP1 y el kit de herramientas Mar 09 Silverlight.

No entiendo por qué la declaración QAPS en la sección de recursos de la aplicación App.xaml podría causar, especialmente dado que no hago referencia a ella en ningún lugar de la aplicación. ¿Tienes alguna idea de lo que podría estar pasando?

otra respuesta a Michael

estás en lo correcto, no había añadido las xmlns: declaración sys a mi Page.xaml, pero añadiendo que no hizo ninguna diferencia - Todavía estoy recibiendo el 'no declarado prefijo [Line: 6 Position: 30] 'error en Page.xaml (y la aplicación aún se ejecuta). Como todo funciona bien, creo que esto debe ser un problema en VS2008.

El problema más grande era que estaba obteniendo una excepción de tiempo de ejecución cuando traté de acceder a QAPS desde C#, y he averiguado lo que estaba haciendo mal para causarlo. El problema fue que aparentemente estaba accediendo al recurso antes de que existiera.

He declarado/inicializado una variable privada para mantener el valor del recurso en el nivel de clase; cuando moví la inicialización al controlador de eventos, el problema desapareció. Así que supongo que las variables de nivel de clase C# se evalúan antes de que se creen los recursos XAML.

(Como un lado, el límite de 600 caracteres en los comentarios es un verdadero dolor. Como es, tengo que editar mi pregunta original para publicar una respuesta).

+0

Lo que hace el XAML se parece a tu Page.xaml. Probablemente omitiste la declaración del espacio de nombres xmlns: sys en tu página.xaml. –

Respuesta

19

ponerlos en su aplicación o página recursos:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <Application.Resources> 
     <sys:Int32 x:Key="QPS">8</sys:Int32> 
    </Application.Resources> 
</Application> 

A continuación, se puede acceder a ellos a través de un código como éste:

if (Application.Current.Resources.Contains("QPS")) 
{ 
    int callsPerSecond = (int) Application.Current.Resources["QPS"]; 
} 

ya través de Xaml como esto

<TextBlock Text="{StaticResource QPS}"/> 
+0

A partir de XAML 2009, su definición de recurso sería ' 8'. Esto se aplica a Windows 8 y Windows Phone 8.1. Consulte http://msdn.microsoft.com/en-us/library/ee792002(v=vs.110).aspx. – danhbear

Cuestiones relacionadas