none
Cambiar valor de una propiedad en un Style.xaml RRS feed

  • Pregunta

  • hola a todos!

    tengo una aplicacion web que da la opcion de cambiar el color de presentacion de esta mediante una paleta de colores. Tras la selección del color deseado lo guarda en base de datos. La idea es que para la próxima vez que se reinicie la aplicación se lea de la BD el el color y se cambie en la propiedad correspondiente en la hoja de estilo.

    El cambio lo realizo en el Application_Startup siempre antes de invocar al Me.RootVisual = New MainPage() para que asi los cambios se efectuen correctamente.

    Para hacer el cambio hago lo siguiente

    'Si tenemos color de configuracion lo cargamos
    If _ctxConfiguracion.CONFIGURACIONs(0).Color IsNot Nothing Then
       If App.Current.Resources.MergedDictionaries.First.Contains("colorPrincipal") Then
           App.Current.Resources.MergedDictionaries.First.Remove("colorPrincipal")
           App.Current.Resources.MergedDictionaries.First.Add("colorPrincipal", PasarARGB(_ctxConfiguracion.CONFIGURACIONs(0).Color))
       End If
    End If
    


    pero el problema es que no me hace el cambio correctamente y solo me lo hace en la pagina del login Me.RootVisual = New MainPage(), estando el resto de la aplicacion con el valor que tiene "colorPrincipal" en el estilo.

    Alguna sugerencia??

     

    un saludo

     

    martes, 30 de agosto de 2011 7:45

Respuestas

  • ya lo solucione!!

    tenia dentro de mi hoja de estilo definido un color global para usarlo en toda mi aplicacion y asi dentro de la web tener un apartado de configuracion donde dar la opcion al usuario de cambiar el color de apariencia de la web. Pues bien ese color lo tenia definido como un Color

     

    <Color x:Key="colorPrincipal">#FFFFFFFF</Color>
    

     

    El problema que esa deficion es como una constante que no permite la modificacion en ejecucion y por lo tanto no me cambia el color. Para solucionarlo me creo un

     

    <SolidColorBrush x:Key="ColorBrushPpal" Color="#FF32CD32"/>
    

    y por ejemplo en una de las propiedades de un Style

    <Setter Property="BorderBrush" Value="{StaticResource ColorBrushPpal }">
    

    entonces ya me permite modificar el color principal de mi aplicación sin ningun problema usando por ejemplo el codigo que nos indica Nestor arriba (existen otras posibilidades)

    Espero que les pueda servir pero si teneis algun problema por aqui estaré

     

    SALUDOS!!

     

     

     

    • Marcado como respuesta ferny6 miércoles, 31 de agosto de 2011 9:14
    miércoles, 31 de agosto de 2011 9:13

Todas las respuestas

  • probando probando me he dado cuenta que el cambio del color solo me lo está haciendo para controles que hacen referencia a "colorPrincipal" en el .axml

    <sdk:Label Style="{StaticResource LabelParaFormClaro}"
        Content="{Binding ConverterParameter=MovimientosCliente_lb_desde, Converter={StaticResource Recursos}, Source={StaticResource Recursos}}" HorizontalAlignment="Left" >
      	<sdk:Label.Foreground>
      		<SolidColorBrush Color="{StaticResource colorPrincipal}"/>
      	</sdk:Label.Foreground>
    </sdk:Label>
    


    aunque el estilo para el label "LabelParaFormClaro" hace ya referencia a "colorPrincipal", solo hace el cambio de color si le añado en el propio .xaml de la page

    ...

     

     

     

    martes, 30 de agosto de 2011 10:45
  • Suponiendo que tienes un estilo asi:

    <Style x:Key="styRectangulo"
        TargetType="Rectangle">
     <Setter Property="Fill"
         Value="Red" />
    </Style>
    

    para un rectángulo:

    <Rectangle Height="100"
          Style="{StaticResource styRectangulo}" />
    


    Esto debería funcionarte:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
     Style ST = this.Resources["styRectangulo"] as Style;
     Setter Fil = ST.Setters[0] as Setter;
     (Fil.Value as SolidColorBrush).Color= Colors.Green;
    }
    
    private void button2_Click(object sender, RoutedEventArgs e)
    {
     Style ST = this.Resources["styRectangulo"] as Style;
     Setter Fil = ST.Setters[0] as Setter;
     (Fil.Value as SolidColorBrush).Color = Colors.Blue;
    }
    



    Blog: Silverideas
    martes, 30 de agosto de 2011 15:51
  • ya lo solucione!!

    tenia dentro de mi hoja de estilo definido un color global para usarlo en toda mi aplicacion y asi dentro de la web tener un apartado de configuracion donde dar la opcion al usuario de cambiar el color de apariencia de la web. Pues bien ese color lo tenia definido como un Color

     

    <Color x:Key="colorPrincipal">#FFFFFFFF</Color>
    

     

    El problema que esa deficion es como una constante que no permite la modificacion en ejecucion y por lo tanto no me cambia el color. Para solucionarlo me creo un

     

    <SolidColorBrush x:Key="ColorBrushPpal" Color="#FF32CD32"/>
    

    y por ejemplo en una de las propiedades de un Style

    <Setter Property="BorderBrush" Value="{StaticResource ColorBrushPpal }">
    

    entonces ya me permite modificar el color principal de mi aplicación sin ningun problema usando por ejemplo el codigo que nos indica Nestor arriba (existen otras posibilidades)

    Espero que les pueda servir pero si teneis algun problema por aqui estaré

     

    SALUDOS!!

     

     

     

    • Marcado como respuesta ferny6 miércoles, 31 de agosto de 2011 9:14
    miércoles, 31 de agosto de 2011 9:13