none
Estilos RRS feed

  • Pergunta

  • Olá pessoal,

    Estou com um probleminha e gostaria de saber se possui alguma solução antes de partir para gambiarra, é o seguinte:

    Tenho um resource dictionary para aplicar estilos aos botões da minha aplicação. Neste resource, tenho um que style sem chave( que não foi definido o x:Key) para definir o style default para todos os botões; e tenho outro style alternativo com a chave definida corretamente. Até aí tudo bem. O que preciso fazer é trocar o estilo de um botão em tempo de execução, e às vezes preciso voltar ao estilo default. Ou seja preciso alternar entre o estilo default e o outro.

    Se alguém souber como fazer ficarei grata,

    obrigada.

     

     

    quinta-feira, 26 de agosto de 2010 19:46

Respostas

  • Agora entendi Juliana...
    Sem a Key é complicado mesmo ... tem um "workaround" para isso, talvez resolva seu problema
    Quando a aplicação inicia o style default será o style sem key, certo?

    Quando a aplicação iniciar, você pega o style padrão de algum controle e o armazena no Resource. Segue um exemplo


      public Window1()
        {
          
          InitializeComponent(); 
    
          ResourceDictionary dict = new ResourceDictionary();
          dict.Source = new Uri("Dictionary1.xaml", UriKind.Relative);
    
          Application.Current.Resources.MergedDictionaries.Clear();
          Application.Current.Resources.MergedDictionaries.Add(dict);
    <br/>      <br/>      // pega o style default de algum controle e armazena no Resources
          Application.Current.Resources.Add("styleSemKey", this.lbl.Style);      
    <br/> <br/>      // seta o outro style que possui a key
          this.lbl.Style = (Style)FindResource("myStyle2");      
        }
    
        private void btn_Click(object sender, RoutedEventArgs e)
        {<br/>	  // depois que armazenar o style default no resource, vc o acessa dessa forma
          this.lbl.Style = (Style)Application.Current.Resources["styleSemKey"];
        }    
    
    Não é uma solução elegante, mas funciona. Vou continuar pesquisando por uma solução melhor.

    Att.
    Anderson

    sexta-feira, 27 de agosto de 2010 16:57

Todas as Respostas

  • Olá Juliana,
    você pode fazer da seguinte maneira

    this.button.Style = (Style)FindResource("myStyle");
    
    Att.
    Anderson
    quinta-feira, 26 de agosto de 2010 20:07
  • mas esta forma é para quando tenho uma chave ( x:Key ) definido.
    quinta-feira, 26 de agosto de 2010 20:12
  • Desculpe Juliana,
    Só para entender, você tem 2 styles certo ? e você quer ter a possibilidade poder alterná-los certo?

    Você pode definir um Dictionary File, como o exemplo abaixo

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
     <Style x:Key="myStyle" TargetType="{x:Type Label}">
      <Setter Property="FontSize" Value="20"/>
     </Style>
     <Style x:Key="myStyle2" TargetType="{x:Type Label}">
      <Setter Property="FontSize" Value="10"/>
     </Style>
    </ResourceDictionary>
    


    Observe que tenho dois styles, para carregar o "myStyle", vc faz o seguinte
    InitializeComponent();
    ResourceDictionary dict = new ResourceDictionary();
    dict.Source = new Uri("Dictionary1.xaml", UriKind.Relative);
    
    Application.Current.Resources.MergedDictionaries.Clear();
    Application.Current.Resources.MergedDictionaries.Add(dict);
       
    this.lbl.Style = (Style)FindResource("myStyle");
    


    E quando você quiser alternar o style

    this.lbl.Style = (Style)FindResource("myStyle2");
    


    é isso que você precisa?
    Att.
    Anderson




    quinta-feira, 26 de agosto de 2010 20:52
  • O lá Anderson, na verdade o que tenho é o seguinte:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    >
    <Style TargetType="{x:Type Label}" > <Setter Property="FontSize" Value="20" />
    </Style>
    <Style x:Key="myStyle2" TargetType="{x:Type Label}" >
    <Setter Property="FontSize" Value="10" /> </Style>
    </ResourceDictionary>

    Copiei seu exemplo e modifiquei para mostrar o que fiz. Repare que no primeiro Style não tenho o x:Key definido, quando faço isto o estilo é aplicado para todos os Labels da aplicação, caso tenha algum label que eu queira um style diferente aí seto o Stlye do label específico com o Segundo Style, neste caso seria o myStyle2. Isto funciona perfeitamente, já estou fazendo isto, o que ocorre é em alguns Labels preciso alternar entre o primeiro Style, que não possui x:Key e o segundo, myStyle2.

    Quando o sistema inicializa os labels ficam com o estilo default, que é o primeiro estilo do resource. Eventualmente troco para o myStyle2, e depois preciso voltar ao primeiro estilo que não possui chave.

    Queria sabe se possui alguma solução para isto :)

    obrigada,

    Juliana

    sexta-feira, 27 de agosto de 2010 14:09
  • Agora entendi Juliana...
    Sem a Key é complicado mesmo ... tem um "workaround" para isso, talvez resolva seu problema
    Quando a aplicação inicia o style default será o style sem key, certo?

    Quando a aplicação iniciar, você pega o style padrão de algum controle e o armazena no Resource. Segue um exemplo


      public Window1()
        {
          
          InitializeComponent(); 
    
          ResourceDictionary dict = new ResourceDictionary();
          dict.Source = new Uri("Dictionary1.xaml", UriKind.Relative);
    
          Application.Current.Resources.MergedDictionaries.Clear();
          Application.Current.Resources.MergedDictionaries.Add(dict);
    <br/>      <br/>      // pega o style default de algum controle e armazena no Resources
          Application.Current.Resources.Add("styleSemKey", this.lbl.Style);      
    <br/> <br/>      // seta o outro style que possui a key
          this.lbl.Style = (Style)FindResource("myStyle2");      
        }
    
        private void btn_Click(object sender, RoutedEventArgs e)
        {<br/>	  // depois que armazenar o style default no resource, vc o acessa dessa forma
          this.lbl.Style = (Style)Application.Current.Resources["styleSemKey"];
        }    
    
    Não é uma solução elegante, mas funciona. Vou continuar pesquisando por uma solução melhor.

    Att.
    Anderson

    sexta-feira, 27 de agosto de 2010 16:57
  • :) Obrigada Anderson, fiz aqui e funcionou certinho!!!
    sexta-feira, 27 de agosto de 2010 17:16