Usuário com melhor resposta
Estilos

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.
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
Não é uma solução elegante, mas funciona. Vou continuar pesquisando por uma solução melhor.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"]; }
Att.
Anderson
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 27 de agosto de 2010 17:19
Todas as Respostas
-
-
-
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
-
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
-
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
Não é uma solução elegante, mas funciona. Vou continuar pesquisando por uma solução melhor.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"]; }
Att.
Anderson
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 27 de agosto de 2010 17:19
-