Usuário com melhor resposta
Como mudar a posicao de uma ellipse?

Pergunta
-
ola , gostaria de ao clickar na window aparecesse um circulo exatamente na posição do click do mouse(hot spot).
Mas não consigo seta a posicção da ellipse.
segue o codigo xaml:
<Window x:Class="teste2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" MouseDown="Window_MouseDown" MouseUp="Window_MouseUp">
</Window>segue o codigo da classe:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace teste2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private Point mouseLocation = new Point();
public MainWindow()
{
InitializeComponent();
this.WindowStyle = System.Windows.WindowStyle.None;
this.Background = Brushes.White;
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
mouseLocation = e.GetPosition(this);
}
private void Window_MouseUp(object sender, MouseButtonEventArgs e)
{
if (mouseLocation == e.GetPosition(this))
{
//MessageBox.Show("voce clicou");
Ellipse elipse1 = new Ellipse();
elipse1.Width = 20;
elipse1.Height = 20;
elipse1.Stroke = Brushes.White;
elipse1.Fill = Brushes.Black;
this.Content = elipse1;
}
}}
}
Respostas
Todas as Respostas
-
No XAML, inclua um canvas:
E no C#, no bloco de código que desenha a elipse, inclua ela dentro do canvas e não direto no content da Window, setando a sua posição em coordenadas X e Y. (também é possível fazer usando TranslateTransform, mas acho muito mais complicado).if
(mouseLocation == e.GetPosition(this)){
Ellipse elipse1 = new Ellipse();
elipse1.Width = 20;
elipse1.Height = 20;
elipse1.SetValue(
Canvas.LeftProperty, mouseLocation.X);elipse1.SetValue(
Canvas.TopProperty, mouseLocation.Y);elipse1.Stroke =
Brushes.White;elipse1.Fill =
Brushes.Black;canvas.Children.Clear();
canvas.Children.Add(elipse1);
}
- Sugerido como Resposta Ucha quarta-feira, 12 de setembro de 2012 14:28
-
ok , ucha deu certo. apenas tive que fazer uma pequena modificação.
elipse1.SetValue(Canvas.LeftProperty, mouseLocation.X - (elipse1.Width /2));elipse1.SetValue(Canvas.TopProperty, mouseLocation.Y - (elipse1.Height /2));
Mas teria como fazer isso sem adicionar o canvas?
Att,
berg IFCE
-
Tem como incluir um RenderTransform do tipo TranslateTransform na Elipse e lá forçar ele a deslocar a Elipse até o ponto do mouse. Mas é muito mais trabalhoso.
Outra vantagem do Canvas, é que ele aceita vários filhotes, então se você remover a linha canvas.Children.Clear(), vai ver que cada clique vai gerar uma Elipse nova sem apagar a anterior.
Teria alguma razão especial para não adicionar o canvas?
-