none
Como mudar a posicao de uma ellipse? RRS feed

  • 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;
                    
                }
            }

      }

    }

    segunda-feira, 10 de setembro de 2012 12:18

Respostas

Todas as Respostas

  • No XAML, inclua um canvas:

    <Canvas x:Name="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
    terça-feira, 11 de setembro de 2012 20:12
  • 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


    quarta-feira, 12 de setembro de 2012 13:07
  • 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?

    quarta-feira, 12 de setembro de 2012 13:36
  • Entendi ucha, Obrigado pela resposta.

    Att,

    Berg - Ifce

    • Marcado como Resposta Berg ifce quarta-feira, 12 de setembro de 2012 13:41
    quarta-feira, 12 de setembro de 2012 13:41