2010-06-01 6 views
5

मुझे Petzold.Media3D.ViewportInfo का उपयोग करके ज्यामितीय गणना करने के एकमात्र उद्देश्य के लिए Viewport3D की आवश्यकता है। मैं इसे Window में रखना नहीं चाहता हूं या अन्यथा इसे प्रस्तुत करना पसंद करूंगा।क्या एक डब्ल्यूपीएफ नियंत्रण के लिए एक वास्तविक विजिट और वास्तविकता होने के लिए यह संभव है यदि इसे कभी प्रस्तुत नहीं किया गया हो?

मैं एक Viewport3D instantiating और निम्नलिखित सी # विधि का उपयोग कर कुछ गुण निर्धारित करके यह पूरा करने के लिए प्रयास कर रहा हूँ:, मैं इस व्यूपोर्ट उपयोग करने के लिए एक करने के लिए माउस स्थान परिवर्तित करने के लिए प्रयास कर रहा हूँ बाद में

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

इस विधि का उपयोग कर 3 डी स्थान:

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

दुर्भाग्यवश, यह काम नहीं कर रहा है। मुझे लगता है कि कारण यह है कि व्यूपोर्ट के ActualWidth और ActualHeight दोनों शून्य हैं (और ये केवल-पढ़ने योग्य गुण हैं, इसलिए मैं उन्हें मैन्युअल रूप से सेट नहीं कर सकता)। (नोट:। मैं एक वास्तविक Viewport3D गाया साथ ठीक उसी विधि का परीक्षण किया है, और यह ठीक काम किया है, इसलिए मुझे पता है कि इस मुद्दे को मेरी कनवर्टर विधि के साथ नहीं है)

किसी भी विचार कैसे मैं WPF ActualWidth आवंटित करने के लिए प्राप्त कर सकते हैं और Width और Height सेटिंग्स के आधार पर नियंत्रण के ActualHeight?

मैं Left और Top, को HorizontalAlignment और VerticalAlignment स्थापित करने की कोशिश की क्रमश: और मैं भी MinWidth और MinHeight साथ गड़बड़ है, लेकिन इन गुणों में से कोई भी ActualWidth या ActualHeight पर कोई प्रभाव नहीं पड़ा।

उत्तर

5

ActualWidth संपत्ति के लिए MSDN विषय से:

यह गुण परिकलित मूल्य अन्य चौड़ाई इनपुट के आधार पर, और लेआउट प्रणाली है। मान लेआउट सिस्टम द्वारा सेट किया गया है, वास्तविक प्रतिपादन पास के आधार पर, और इसलिए इनपुट परिवर्तन के आधार पर चौड़ाई जैसे गुणों के सेट मान के पीछे थोड़ा सा अंतराल हो सकता है।

तो, ऐसा लगता है कि संपत्ति के सेट के लिए एक प्रतिपादन पास आवश्यक है। हालांकि, आप लेआउट प्रक्रिया अनुकरण करने के लिए Measure(Size) और फिर Arrange(Rect) पर कॉल करने का प्रयास कर सकते हैं। शायद यह पहले से ही पर्याप्त है।

+0

एक आकर्षण की तरह काम करता है, धन्यवाद। – devuxer

+0

कूल, मुझे खुशी है कि यह काम करता है। यहां कुछ नया भी सीखा। :) – gehho

संबंधित मुद्दे

 संबंधित मुद्दे