Introdução Este pequeno artigo visa demonstrar de maneira simplificada o caminho para se renderizar um jogo feito em XNA dentro de uma Window do WPF. Para obter tal resultado precisamos de um componente do Windows Forms que derive da classe Control a fim de intermediar a operação. Vamos precisar da propriedade Handle de um Control para “jogarmos” a imagem do jogo nesse controle. Isso será feito através do método GraphicsDevice.Present . Etapa 1 – Projeto WPF Crie um projeto Wpf Application. Feito isso você vai precisar adicionar referência a estas “dlls” abaixo:
|
Dll
|
Path
|
|
WindowsFormsIntegration.dll
|
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
|
|
System.Windows.Forms.dll
|
C:\Windows\Microsoft.NET\Framework\v2.x.xxx
|
Isso vai ser necessário para utilizarmos o componente WindowsFormsHost no “Grid”da Window. Aonde utilizaremos algum container do Windows Forms para jogarmos a imagem nesse container. No exemplo que libero para download, eu coloquei um Panel dentro do WindowsFormsHost. Obtendo este resultado: <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"> <Grid> <WindowsFormsHost Name="winformshost1"> <wf:Panel Name="panel1" /> </WindowsFormsHost> </Grid> </Window> Etapa 2 – Projeto XNA No projeto XNA Windows Game, adicione uma referência para o projeto WPF criado acima. Você também vai precisar adicionar referência para as dlls abaixo:
|
Dll
|
Path
|
|
WindowsBase.dll
|
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
|
|
PresentationCore.dll
|
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
|
|
PresentationFrameWork.dll
|
C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0
|
|
System.Windows.Forms.dll
|
C:\Windows\Microsoft.NET\Framework\v2.x.xxx
|
Ao final de tudo, sua Solution Explorer deve parecer com esta imagem:

Conclusão No fim, temos o frameWork do XNA renderizando imagens para um controle Windows Forms, que por sua vez, está sendo “hosteado” numa Window do WPF. Em suma, a ordem do caminho das imagens renderizadas fica assim: XNA -> Controle Windows Forms -> WPF Por enquanto, não deve haver muita vantagem na integração com o WPF e dependendo de como for feito, pode dificultar o porte para Zune ou Xbox 360. Sem contar que o processo de integração com o Windows Forms é mais simples e estável, se tornando, por enquanto, uma opção melhor que a integração com o WPF. Se você quer, por exemplo, criar um Editor de Level integrado com o seu jogo, faça uma análise e um estudo mais apurado para ver se realmente vale a pena usar WPF! Alguns controles parecem não funcionar bem, como é o caso do TextBox do WPF! Faça o download de um exemplo sobre este artigo logo abaixo. Dúvidas, Críticas ou sugestões? Obrigado!
 |