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.

text alt

¿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);
¿Fue útil?

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:

text alt

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top