Sempre me perguntam por e-mail ou nas palestras que faço se desenvolver com WPF é difícil, eu diria que desenvolver aplicações com WPF não é difícil, mas sim vai dar trabalho sair do velho Windows Forms e cair direto no WPF, exige sim estudo, entender como tudo aquilo funciona para não cometer o erro que muita gente comete, desenvolver aplicações Windows Forms com WPF.
Como assim aplicações Windows Forms com WPF?
Bom simplesmente desenvolvendo pensando na forma errada, esse eu acho o maior problema, o paradigma é outro, antes de sair escrevendo código, temos que pensar antes em todos os recursos que o WPF oferece para fazer da melhor forma possível.
Vou dar um exemplo abaixo do que eu chamo de desenvolver Windowns Forms com WPF, imaginem a tela de segurança de banco de dados, onde o usuário pode escolher a forma de segurança, disponível por 2 RadioButtons, Segurança Integrado do Windows ou Usuário e Senha do SQL Server e dois TextBox para informar o Usuário e Senha caso o usuário escolha Usuário e Senha do SQL Server.
A tela é simples:
Pensando na forma Windows Forms no eu vou programar o evento Checked de cada RadioButton, eles irão chamar um método que analisa se o Usuário e Senha do SQL Server está selecionado, e habilita os TextBox de Usuário e Senha.
1: private void radSegurancaIntegradaWindows_Checked(object sender, RoutedEventArgs e)
2: {
3: VerificarFormaSeguranca();
4: }
5:
6: private void radUsuarioSenhaSQLServer_Checked(object sender, RoutedEventArgs e)
7: {
8: VerificarFormaSeguranca();
9: }
10:
11: private void VerificarFormaSeguranca()
12: {
13: if(radUsuarioSenhaSQLServer != null)
14: txtUsuario.IsEnabled = txtSenha.IsEnabled = (bool) radUsuarioSenhaSQLServer.IsChecked;
15: }
O código funciona perfeitamente, mas eu não preciso fazer nada disso, eu posso utilizar os recusos de Binding do WPF, e faço todo esse tratamento direto no XAML.
Veja abaixo.
1: <TextBox Name="txtUsuario" Width="250" IsEnabled="{Binding ElementName=radUsuarioSenhaSQLServer, Path=IsChecked}"/>
2: <PasswordBox Name="txtSenha" Width="250" IsEnabled="{Binding ElementName=radUsuarioSenhaSQLServer, Path=IsChecked}"/>
Vejam que a propriedade IsEnabled do TextBox e do PasswordBox estão fazendo um Binding a outro elemento do meu formulário, ElementName=radUsuarioSenhaSQLServer na propriedade IsChecked, Path=IsChecked.
Resumindo, utilizar todo o poder do WPF da sim um pouco de trabalho, no que diz respeito a ter que estudar, aprender, etc… mas o resultado final recompensa todo o esforço!
Abraços e até a próxima.




