Aquí podría ser tu PUBLICIDAD


Usar objetos estáticos en XAML que se crearon en código en Silverlight

votos
13

No pude hacer que esto funcionara en Silverlight, así que creé dos proyectos de prueba. Un proyecto sencillo de WPF y un proyecto simple de Silverlight que solo hacen una cosa: establecer una variable de solo lectura estática pública en el código, y usarla en un XAML totalmente desnudo. En WPF, funciona sin problemas. En Silverlight, recibo la siguiente advertencia del compilador y error de tiempo de ejecución:

Advertencia 2 La etiqueta 'Static' no existe en el espacio de nombres XML ' http://schemas.microsoft.com/winfx/2006/xaml ' ...

y

Valor de atributo no válido {x: Static SilverlightApplication3: Page.Test} para el texto de la propiedad. [Línea: 7 Posición: 25]

Supongo que esto no es compatible con Silverlight 2, ¿o simplemente me estoy perdiendo algo realmente simple? Aquí está el código completo para ambos en caso de que sea el último:

public partial class Window1 : Window
{
    public static readonly string Test = test;
    public Window1()
    {
        InitializeComponent();
    }
}

<Window x:Class=WpfApplication4.Window1
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    Title=Window1 Height=300 Width=300
        xmlns:WpfApplication4=clr-namespace:WpfApplication4>    
    <Grid>
        <TextBlock Text={x:Static WpfApplication4:Window1.Test} />
    </Grid>
</Window>

y aquí está la versión SL:

public partial class Page : UserControl
    {
        public static readonly string Test = test;
        public Page()
        {
            InitializeComponent();
        }
    }

<UserControl x:Class=SilverlightApplication3.Page
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation 
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    xmlns:SilverlightApplication3=clr-namespace:SilverlightApplication3
    Width=400 Height=300>
    <Grid x:Name=LayoutRoot Background=White>
        <TextBlock Text={x:Static SilverlightApplication3:Page.Test} />
    </Grid>
</UserControl>
Publicado el 12/03/2009 a las 20:33
fuente por usuario Rich
En otros idiomas...        العربية       

5 respuestas

votos
6

Desafortunadamente, Silverlight tiene muchos límites con respecto a la funcionalidad y acabas de encontrar uno de ellos. StaticMarkupExpression no es compatible con SL2. Usted tampoco puede definirlo usted mismo.

por ejemplo, chico de ms: http://blogs.msdn.com/edmaia/archive/2008/11/23/animating-objects-visibility-in-silverlight.aspx

El truco puede ser usar un objeto como

class Helper{
    public string Value {get{return Page.Test;}} 

// implement INotifyPropertyChange if you want updates
}

Y entonces

<Grid.Resources>
     <somexmlns:Helper x:Key="Helper"/>
</Grid.Resources>

<TextBlock Text="{Binding Value, Source={StaticResource Helper}}"/>
Respondida el 12/03/2009 a las 08:44
fuente por usuario user76035


Aquí podría ser tu PUBLICIDAD


votos
5

Desafortunadamente, parece que Silverlight no admite el enlace a propiedades estáticas: ¿Cuál es el equivalente de {x: Static sdfsdf}?

Respondida el 12/03/2009 a las 08:41
fuente por usuario Andy

votos
3

En realidad, puede vincularse a propiedades estáticas siempre que la clase no sea una clase estática. Entonces, usando el ejemplo anterior de la clase Helper:

public class Helper
{
    public static string Value{ get {return Page.Test;} }
}

El XAML permanecerá igual.

Respondida el 12/05/2009 a las 08:05
fuente por usuario Sam

votos
1

Me di cuenta de que tenía una pregunta secundaria sobre el enlace a un color. No creo que se pueda hacer en Silverlight. Estoy bastante seguro de que el requisito mínimo para un objetivo vinculante en Silverlight es FrameworkElement.

Respondida el 12/05/2009 a las 09:47
fuente por usuario Sam

votos
-2

Un objeto estático se crea una instancia sólo una vez y se mantendrá hasta el final del objeto estático program.A puede conservar su estado incluso cuando no está en su alcance, pero sólo visible dentro de su ámbito local.

Respondida el 22/07/2010 a las 10:22
fuente por usuario copelia