br Posted April 13, 2012 at 04:21 AM Report #448898 Posted April 13, 2012 at 04:21 AM boas Quero desenhar um tabuleiro de xadrez em windows phone. já o fiz para windows form, mas agora não estou a conseguir porque as Images do windows phone não tem as mesmas propriedades. aqui esta o codigo para windows form for (int i = 0; i < 8; i++) { tabuleiro[i] = new PictureBox[8]; } int lx = 0, ly = 0; for (int x = 0; x < 8; x++) { lx = 0; for (int y = 0; y < 8; y++) { tabuleiro[x][y] = new PictureBox(); tabuleiro[x][y].Location = new Point(ly, lx); tabuleiro[x][y].Size = new System.Drawing.Size(50, 50); tabuleiro[x][y].SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; tabuleiro[x][y].Tag = new Point(x, y); tabuleiro[x][y].Name = "t" + x + "," + y; tabuleiro[x][y].Click += new EventHandler(tabuleiro_click); if (QueroMatriz(x, y) == 0) tabuleiro[x][y].Image = Properties.Resources._0; if (QueroMatriz(x, y) == -1) tabuleiro[x][y].Image = Properties.Resources._1; if (QueroMatriz(x, y) == 1) tabuleiro[x][y].Image = Properties.Resources.Peca1; if (QueroMatriz(x, y) == 2) tabuleiro[x][y].Image = Properties.Resources.Peca2; Controls.Add(tabuleiro[x][y]); this.pbTabuleiro.Controls.Add(tabuleiro[x][y]); lx += 50; } ly += 50; } alquem me pode ajudar?
petvetbr Posted April 13, 2012 at 05:44 PM Report #449047 Posted April 13, 2012 at 05:44 PM Windows Phone tradicional ou o Windows Phone 7? Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 13, 2012 at 11:10 PM Author Report #449090 Posted April 13, 2012 at 11:10 PM WP 7.1 ja vi todas a propriedades das Images mas nao consigo relacionar com o o exercicio que fiz, como a location, etc...
petvetbr Posted April 14, 2012 at 02:00 AM Report #449110 Posted April 14, 2012 at 02:00 AM No sistema do Windows Phone, que é baseado em WPF e Silverlight, existe um sistem diferente para posicionamente dependendo do container que estiver sendo utilizado. Por exemplo, se o seu container for um Grid, você pode acertar o posicionamento usando Grid.Row, Grid.Column, se for Canvas, que é o mais próximo do Windows Form, você pode utilizar Canvas.SetLeft e Canvas.SetRight, outra opcao é utilizar margin, mas isto dever ser deixado para ajustes finos. links: http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-2-using-layout-management.aspx http://www.silverlight.net/learn/creating-ui/layout,-rendering,-and-panels/layout-on-the-screen-%28silverlight-quickstart%29 Além do posicionamento existe alguma outra propriedade que você está tendo dificuldades? Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 14, 2012 at 06:13 AM Author Report #449116 Posted April 14, 2012 at 06:13 AM petvetbr obrigado pela resposta mas continuo a não entender como mexer no canvas. não estou a conseguir entrar nessa propriedade, eu altero isso no ficheiro cs que estou a trabalhar ou no xaml? entretanto fui procurar e encontrei umas coisas que podem ate fazer o que quero: for (int x = 0; x < 8; x++) { lx = 0; for (int y = 0; y < 8; y++) { tabuleiro[x][y] = new Image(); tabuleiro[x][y].Margin = new Thickness(lx, ly, 0, 0); tabuleiro[x][y].Width = 10; tabuleiro[x][y].Height = 10; tabuleiro[x][y].Tag = new Point(x, y); tabuleiro[x][y].Name = "t" + x + "," + y; if (matriz[x][y] == 0) tabuleiro[x][y].Source = new BitmapImage(new Uri("/imgs/0.jpg", UriKind.Relative)); lx += 10; } ly += 10; } estou a tentar fazer alguma coisa parecida com isto: http://www.windowsphonegeek.com/tips/wp7-working-with-images-content-vs-resource-build-action mas nao me reconhece BitmapImage. tenho que adicionar alguma coisa no xaml para poder usar as imagens? outro problema é como adiciono o evento click a cada uma das imagens? ainda estou muito verdinho no windows phone. 😕 mas vou la chegar 😉
petvetbr Posted April 14, 2012 at 09:05 AM Report #449120 Posted April 14, 2012 at 09:05 AM No xaml <Canvas Name="cv" width=[largura] height=altura/> no cs Ao criar cada image: Canvas.SetLeft(image, [valor coordenada x]); Canvas.SetTop(image, [valor coordenada y]); cv.Children.Add(image); ------- Quanto ao evento click - usar evento MouseDown já que imagens não tem click no xaml ------ Em relação as imagens- qual a BuildAction delas no projeto? Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 14, 2012 at 09:10 AM Author Report #449121 Posted April 14, 2012 at 09:10 AM obrigado mas para eu fazer isto: tabuleiro[x][y].Source = new BitmapImage(new Uri("/imgs/0.jpg", UriKind.Relative)); tenho que mudar alguma coisa no xaml? não entendi essa parte. Em relação as imagens- qual a BuildAction delas no projeto? nao entendi
petvetbr Posted April 14, 2012 at 10:38 AM Report #449127 Posted April 14, 2012 at 10:38 AM Não precisa mudar o código desde que o build action das imagens esteja correto. Você precisa clicar nas imagens que adicionou no projeto e ver se o build action delas (esta opção aparece na janela de propriedades do item) esta de acordo com o que foi recomendado no site que você mencionou na mensagem anterior. Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 14, 2012 at 11:17 AM Author Report #449134 Posted April 14, 2012 at 11:17 AM hum entendi. bastante diferente para windows form! resolvi da seguinte forma: adicionei a class System.Windows.Media.Imaging mudei a buildaction para content e deixou de dar erro aqui tabuleiro[x][y].Source = new BitmapImage(new Uri("/imgs/0.jpg", UriKind.Relative)); só que agora não sei como usar isto: Controls.Add(tabuleiro[x][y]); this.pbTabuleiro.Controls.Add(tabuleiro[x][y]); isto não e possível no WP
petvetbr Posted April 14, 2012 at 01:01 PM Report #449142 Posted April 14, 2012 at 01:01 PM Você pode retirar estas linhas, pois o canvas.children.add faz esta função. Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 14, 2012 at 02:10 PM Author Report #449158 Posted April 14, 2012 at 02:10 PM muito obrigado! o que eu quero é exactamente isto: for (int x = 0; x < 8; x++) { lx = 0; for (int y = 0; y < 8; y++) { casa = new Image(); if (matriz[x][y] == 0) casa.Source = new BitmapImage(new Uri("/imgs/0.jpg", UriKind.Relative)); if (matriz[x][y] == -1) casa.Source = new BitmapImage(new Uri("/imgs/-1.jpg", UriKind.Relative)); if (matriz[x][y] == 1) casa.Source = new BitmapImage(new Uri("/imgs/Peca1.jpg", UriKind.Relative)); if (matriz[x][y] == 2) casa.Source = new BitmapImage(new Uri("/imgs/Peca2.jpg", UriKind.Relative)); Canvas.SetLeft(casa, ly); Canvas.SetTop(casa, lx); tabuleiro.Children.Add(casa); lx += 50; } ly += 50; } não estava a entender muito bem o que era o canvas, mas assim é muito mais fácil só mais uma coisa, para o evento click, não devia ser qualquer coisa como: Canvas.MouseLeftButtonDownEvent += new EventHandler(tabuleiro_MouseLeftButtonDown); ??? e depois dentro do evento eu quero alguma coisa isto: tabuleiro = (Canvas)sender; Point p = new Point(Canvas.GetTop(tabuleiro) / 50, Canvas.GetLeft(tabuleiro) / 50); ... não estou a encontrar exemplos com isto
petvetbr Posted April 14, 2012 at 03:25 PM Report #449171 Posted April 14, 2012 at 03:25 PM Um jeito mais fácil é aplicar um valor na propriedade Tag de cada image e capturar o evento mousedown na image. Ai vc simplesmente pega o tag do Sender para identificar qual image foi pressionada. Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 14, 2012 at 11:41 PM Author Report #449234 Posted April 14, 2012 at 11:41 PM sim eu sei. mas o problema é ao adicionar o evento a imagem Canvas.MouseLeftButtonDownEvent += new EventHandler(tabuleiro_MouseLeftButtonDown);
petvetbr Posted April 15, 2012 at 01:34 AM Report #449244 Posted April 15, 2012 at 01:34 AM Isto não funciona? ... casa = new Image(); casa.MouseLeftButtonDownEvent += new EventHandler(tabuleiro_MouseLeftButtonDown); //pega o evento da imagem if (matriz[x][y] == 0) casa.Source = new BitmapImage(new Uri("/imgs/0.jpg", UriKind.Relative)); ... Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 15, 2012 at 04:12 PM Author Report #449316 Posted April 15, 2012 at 04:12 PM nao, da este erro: Error 1 No overload for 'tabuleiro_MouseLeftButtonDown' matches delegate 'System.EventHandler' ja tentei por casa.mousebuttonleftdown e canvas... e da o mesmo erro
petvetbr Posted April 15, 2012 at 04:20 PM Report #449317 Posted April 15, 2012 at 04:20 PM Você tem um método exatamente como este no seu código? private void tabuleiro_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { //codigo aqui } Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 15, 2012 at 04:25 PM Author Report #449318 Posted April 15, 2012 at 04:25 PM sim tenho, esta tudo direito... nao estou a entender o erro, ja "virei" o google e nada
petvetbr Posted April 15, 2012 at 04:27 PM Report #449320 Posted April 15, 2012 at 04:27 PM tem como você colocar o código todo aqui ou no pastebin para eu dar uma olhada? Fernando Lage Bastos - MCP/MCTS/MCPD
br Posted April 15, 2012 at 04:30 PM Author Report #449321 Posted April 15, 2012 at 04:30 PM pode ser na public da minha dropbox? http://dl.dropbox.com/u/31324551/DamasWP%20teste.rar obrigado
petvetbr Posted April 15, 2012 at 04:47 PM Report #449324 Posted April 15, 2012 at 04:47 PM onde está: Canvas.MouseLeftButtonDownEvent += new EventHandler(tabuleiro_MouseLeftButtonDown); troque por casa.MouseLeftButtonDown += new MouseButtonEventHandler(tabuleiro_MouseLeftButtonDown); Fernando Lage Bastos - MCP/MCTS/MCPD
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now