¿Es posible que un control de WPF para tener una ActualWidth y ActualHeight si se ha rendido nunca?

StackOverflow https://stackoverflow.com/questions/2947729

Pregunta

necesito un Viewport3D con el único propósito de hacer cálculos geométricos utilizando Petzold.Media3D.ViewportInfo. Yo preferiría no tener que colocarlo en una Window o hacer de otro modo a él.

Estoy intentando lograr esto creando una instancia de un Viewport3D y fijando algunas características utilizando el siguiente método C #:

private Viewport3D CreateViewport(MainSettings settings)
{
    var cameraPosition = new Point3D(0, 0, settings.CameraHeight);
    var cameraLookDirection = new Vector3D(0, 0, -1);
    var cameraUpDirection = new Vector3D(0, 1, 0);
    var camera = new PerspectiveCamera
    {
        Position = cameraPosition,
        LookDirection = cameraLookDirection,
        UpDirection = cameraUpDirection
    };
    var viewport = new Viewport3D
    {
        Camera = camera,
        Width = settings.ViewportWidth,
        Height = settings.ViewportHeight
    };
    return viewport;
}

Más tarde, voy a tratar de usar este visor para convertir la ubicación del ratón en una ubicación 3D usando este método:

public Point3D? Point2dToPoint3d(Point point)
{
    var range = new LineRange();
    var isValid = ViewportInfo.Point2DtoPoint3D(_viewport, point, out range);
    if (isValid)
        return range.PointFromZ(0);
    else
        return null;
}

Por desgracia, no está funcionando. Creo que la razón es que el ActualWidth y ActualHeight de la ventana son ambos cero (y éstas son propiedades de sólo lectura, por lo que no les puedo configurar manualmente). (Nota:. He probado el mismo método exacto con un Viewport3D rendido real, y ha funcionado muy bien, así que sé que el problema no es con mi método de convertidor)

¿Alguna idea de cómo puedo conseguir WPF para asignar el ActualWidth y ActualHeight de un control basado en la configuración Width y Height?

I intentado fijar la HorizontalAlignment y VerticalAlignment a Left y Top, respectivamente, y también he metido con el MinWidth y MinHeight, pero ninguna de estas propiedades tenido ningún efecto sobre la ActualWidth o ActualHeight.

¿Fue útil?

Solución

Desde tema de MSDN para la ActualWidth propiedad:

Esta propiedad es un valor calculado en base a otras entradas de ancho, y el sistema de diseño. El valor se establece por el propio sistema de diseño, basado en un pase de representación real , y por lo tanto puede retrasarse ligeramente por detrás del valor conjunto de propiedades como el ancho que son la base del cambio de entrada.

Por lo tanto, esto suena como un pase de representación es necesaria para la propiedad que desea ajustar. Sin embargo, usted podría tratar de llamar Measure(Size) a continuación, Arrange(Rect) para simular el proceso de diseño. Tal vez esto ya es suficiente.

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