Estoy creando programáticamente una forma Ellipse pero no puedo encontrar ninguna propiedad que especifique su posición. Lines
tiene X1, Y1, X2, Y2, pero no hay Centro, Posición, X, Y, etc. en una forma de Elipse. ¿Cómo puedo hacer esto?¿Cómo especificar la posición de una forma Elipse en un lienzo en WPF?
Respuesta
formas Poner en lugares arbitrarios en la pantalla, probablemente, se debe hacer así que en un Panel de Lona (vea la respuesta de @phoog). Pero si lo ubica en una Cuadrícula u otro panel, siempre puede modificar la propiedad Margen para colocarlo donde lo desee.
Si quisiera hacerlo especificando el punto en lugar de la esquina superior izquierda de la elipse central, usted puede hacer esto:
Ellipse CreateEllipse(double width, double height, double desiredCenterX, double desiredCenterY)
{
Ellipse ellipse = new Ellipse { Width = width, Height = height };
double left = desiredCenterX - (width/2);
double top = desiredCenterY - (height/ 2);
ellipse.Margin = new Thickness(left, top, 0, 0);
return ellipse;
}
No he comprobado que esto es exactamente lo que quiere en el compilador, pero espero que entiendas la idea. Una vez más, el uso de lienzo sería el método preferido sobre el uso del margen interior de un panel no lienzo, pero el mismo principio de calcular la izquierda y arriba seguiría aplicándose:
Canvas.SetLeft(ellipse, desiredCenterX - (width/2))
Canvas.SetTop(ellipse, desiredCenterY - (height/2))
Canvas.Left y Canvas.Top. Todo está en la documentación sobre "Cómo dibujar una elipse o un círculo" http://msdn.microsoft.com/en-us/library/ms751563.aspx
En código C#, la sintaxis sería la siguiente:
Gracias, probé esos en código pero no funciona. Hice esto: 'elipse.Canvas.Left', pero no hay propiedad' Canvas' en un objeto 'Ellipse'. –
Edité mi respuesta para mostrar la sintaxis de C#. La propiedad Canvas.Left (y .Top, .Bottom, .Right) son propiedades adjuntas. Consulte la descripción general en http://msdn.microsoft.com/en-us/library/ms749011.aspx – phoog
Si usted tiene los puntos inicial y final, así como el radio y un booleano para si es en el sentido de las agujas del reloj o no, entonces use mi función :)
function ellipse(x1, y1, x2, y2, radius, clockwise) {
var cBx = (x1 + x2)/2; //get point between xy1 and xy2
var cBy = (y1 + y2)/2;
var aB = Math.atan2(y1 - y2, x1 - x2); //get angle to bulge point in radians
if (clockwise) { aB += (90 * (Math.PI/180)); }
else { aB -= (90 * (Math.PI/180)); }
var op_side = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2))/2;
var adj_side = Math.sqrt(Math.pow(radius, 2) - Math.pow(op_side, 2));
if (isNaN(adj_side)) {
adj_side = Math.sqrt(Math.pow(op_side, 2) - Math.pow(radius, 2));
}
var Cx = cBx + (adj_side * Math.cos(aB));
var Cy = cBy + (adj_side * Math.sin(aB));
var startA = Math.atan2(y1 - Cy, x1 - Cx); //get start/end angles in radians
var endA = Math.atan2(y2 - Cy, x2 - Cx);
var mid = (startA + endA)/2;
var Mx = Cx + (radius * Math.cos(mid));
var My = Cy + (radius * Math.sin(mid));
context.arc(Cx, Cy, radius, startA, endA, clockwise);
}
- 1. Añadir posición de elipse dentro del lienzo
- 2. Cómo dibujar una elipse completa en StreamGeometry en WPF?
- 3. WPF zoom de lienzo y mantener la posición de desplazamiento
- 4. Elipse Dibujo Animación WPF
- 5. WPF: ¿cómo puedo unir la posición de un control a la posición actual del mouse?
- 6. Cálculo de un punto en una elipse
- 7. Guardar un lienzo WPF como una imagen
- 8. WPF Virtualización de un lienzo
- 9. ¿Cómo se puede alinear un fondo de lienzo en WPF?
- 10. Lienzo arrastrable en WPF usando un 'Thumb'
- 11. dibujar una forma transparente en el lienzo
- 12. Estirar un lienzo WPF horizontalmente
- 13. OnMouseMove no dispara en lienzo en WPF
- 14. Prueba de posición de punto y elipse (girada): algoritmo
- 15. ¿Es posible especificar la posición de un Toast?
- 16. ¿Hay alguna forma de especificar la posición/índice del argumento en NSString stringWithFormat?
- 17. En XAML, ¿cómo puedo mantener una elipse como un círculo?
- 18. WPF parpadea una animación de relleno de elipse
- 19. Cómo centrar un elemento en el lienzo wpf
- 20. ¿Cómo puedo hacer que parpadee una elipse?
- 21. Detectar la posición relativa del mouse en el lienzo matplotlib
- 22. Cómo controlar la posición de desplazamiento de un ListBox en una aplicación MVVM WPF
- 23. Cómo crear una ventana en forma de elipse con VC++ usando win32 API
- 24. WPF La unión a cambiar una pregunta simple color de relleno de la elipse
- 25. Evento de vinculación a la forma en el lienzo
- 26. Cómo dibujar barras de desplazamiento en WPF Lienzo
- 27. WPF: ¿Cómo establecer una posición de diálogo para mostrar en el centro de la aplicación?
- 28. detección de lienzo de javascript clic en la forma
- 29. WPF: Gire el rectángulo y colóquelo en el lienzo
- 30. Forma de especificar múltiples interfaces en Java
¿Por qué no hay propiedades Left? WPF es tan raro ... – Kamil
@Kamil el posicionamiento en este caso es una propiedad del contanier, no la elipse en sí. En un lienzo, establece la propiedad 'Canvas.Left'. De hecho, raro ... – heltonbiker
@heltonbiker Creo que hay una razón por la que está diseñado así, pero aún no descubrí esa razón. – Kamil