2010-06-01 20 views
5

Tôi cần Viewport3D với mục đích duy nhất là tính toán hình học sử dụng Petzold.Media3D.ViewportInfo. Tôi không muốn đặt nó trong một số Window hoặc nói cách khác.Có thể điều khiển WPF có ActualWidth và ActualHeight nếu nó chưa bao giờ được hiển thị không?

Tôi đang cố gắng để thực hiện điều này bằng cách instantiating một Viewport3D và thiết lập một vài thuộc tính bằng cách sử dụng C# phương pháp sau đây:

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

Sau đó, tôi đang cố gắng sử dụng khung nhìn này để chuyển đổi vị trí chuột để một Vị trí 3D sử dụng phương pháp này:

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

Thật không may, nó không hoạt động. Tôi nghĩ lý do là ActualWidthActualHeight của chế độ xem đều là số không (và đây là các thuộc tính chỉ đọc, vì vậy tôi không thể đặt chúng theo cách thủ công). (Lưu ý: Tôi đã thử nghiệm chính xác cùng một phương pháp với một thực tế rendered Viewport3D, và nó làm việc tốt, vì vậy tôi biết vấn đề không phải là với phương pháp chuyển đổi của tôi.)

Bất kỳ ý tưởng làm thế nào tôi có thể nhận được WPF để gán ActualWidthActualHeight của điều khiển dựa trên cài đặt WidthHeight?

tôi đã cố gắng thiết lập các HorizontalAlignmentVerticalAlignment để LeftTop, tương ứng, và tôi cũng sai lầm với MinWidthMinHeight, nhưng không ai trong số các đặc tính này có bất kỳ ảnh hưởng đến ActualWidth hoặc ActualHeight.

Trả lời

5

Từ MSDN chủ đề cho ActualWidth tài sản:

Khách sạn này là một giá trị được tính toán dựa trên đầu vào chiều rộng khác, và hệ thống bố trí. Giá trị được thiết lập bởi chính hệ thống bố trí, dựa trên đường chuyền hiển thị thực tế và do đó có thể tụt hậu so với giá trị được đặt của các thuộc tính như Chiều rộng làm cơ sở cho thay đổi đầu vào.

Vì vậy, điều này có vẻ như một đường dẫn hiển thị là cần thiết để đặt thuộc tính. Tuy nhiên, bạn có thể thử gọi Measure(Size) và sau đó Arrange(Rect) để mô phỏng quy trình bố cục. Có lẽ điều này đã đủ rồi.

+0

Hoạt động như một sự quyến rũ, cảm ơn. – devuxer

+0

Tuyệt, tôi rất vui vì nó hoạt động. Ngoài ra học được một cái gì đó mới ở đây. :) – gehho

Các vấn đề liên quan