¿Por ActualWidth y ActualHeight empezar desde 0,0?
-
25-09-2019 - |
Pregunta
Quiero añadir WPF Camino a la selección y el uso InkCanvas
para seleccionar WPF Path.
Por lo tanto, utilizo este código.
System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
inkCanvas.Children.Add(path);
Esta es la salida. Tengo que seleccionar WPF Ruta desde 0,0 a causa Actualwidth
y ActualHeight
parten de 0,0.
¿Cómo seleccionar la ruta de WPF absoluta?
Gracias
Editar
Ahora, puede seleccionarlo absolutamente utilizando este código.
System.Windows.Shapes.Path path = drawCanvas.Children[i] as System.Windows.Shapes.Path;
drawCanvas.Children.RemoveAt(i);
path.Margin = new Thickness(-getMinX(path), -getMinY(path), 0, 0);
containPath.Children.Add(path);
containPath.Width = getMaxX(path) - getMinX(path);
containPath.Height = getMaxY(path) - getMinY(path);
containPath.Margin = new Thickness(getMinX(path), getMinY(path), 0, 0);
inkCanvas.Children.Add(containPath);
Solución
Puede utilizar el href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.updatelayout.aspx" rel="nofollow noreferrer"> UIElement.UpdateLayout Método en el InkCanvas
para actualizar la FrameworkElement.ActualWidth propiedad y ActualHeight
. Vea el enlace de ActualWidth
para obtener información básica acerca de por qué esto es necesario.
Editar
he entendido bien la pregunta. No era que ActualWidth
y ActualHeight
eran cero, sino que sus valores son relativos a (0, 0)
en el InkCanvas
. Una solución bastante buena para el problema es envolver el Path
en un Canvas
y la posición usando Margin
como esto:
<Canvas Width="50" Height="50" Margin="200,200,0,0">
<Line
X1="0" Y1="0"
X2="50" Y2="50"
Stroke="Black"
StrokeThickness="4" />
</Canvas>
que se comporta como:
La desventaja de este enfoque es que el usuario tiene que enlazar el Canvas
que es un rectángulo, no una forma arbitraria. Sin embargo, es mucho mejor que tener que enlazar el objeto y el origen.
Otros consejos
Para los elementos que solamente se pueden definir a través de puntos de control (por ejemplo, línea, una ruta etc como en contra del rectángulo, elipse, etc.) cuando se agrega a un control de elementos (que supongo que la InkCanvas
es, ya que es compatible con la selección), en primer lugar un lienzo se añade al panel en 0,0. La anchura y la Height
de los lona se determinan a partir del máximo coordenadas X e Y de los puntos de control. Después de esto se añade el elemento como un niño de esta lona.
También se verá que cada vez que vea este tipo de comportamientos con un elemento, el elemento de apoyo planteo Propiedades de diseño como horizontal / vertical de alineación, etc.
La única manera que veo en todo esto es encontrar la ActualWidth
y ActualHeight
manualmente de las coordenadas en el camino.
Editar:. Este es por experiencia personal y no de cualquier documentación