2009-02-03 12 views
5

एनओएफएफ दस्तावेज़ देखने वाले नियंत्रण जो एनोटेशन का समर्थन करते हैं उनमें फ्लो डॉक्यूमेंटर रीडर और फ़्लो डॉक्यूमेंटस्क्रॉल व्यूअर, साथ ही दस्तावेज़व्यूअरबेस से निकाले गए नियंत्रण जैसे दस्तावेज़व्यूअर और फ़्लो डॉक्यूमेंट पेजव्यूयर शामिल हैं।उपयोगकर्ता को WPF में यूआई नियंत्रण में एनोटेशन जोड़ने की अनुमति कैसे दें?

The in-built Annotations support for Document based controls is awesome in WPF

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

दिमाग में आने वाली पहली बात दस्तावेज़व्यूअरबेस से प्राप्त करने और अपने स्वयं के कस्टम नियंत्रण बनाने के लिए है। मुझे यकीन नहीं है कि यह कैसे काम करेगा। क्या होगा अगर गैर-कस्टम नियंत्रणों को एनोटेट किया जाना चाहिए?

क्या किसी ने इस तरह की सुविधा को काम किया है या देखा है?

कोई भी निर्देश उपयोगी होगा।

उत्तर

5

हम्म। मैं शायद एक adorner के साथ ऐसा होगा:

Imports System.Windows 
Imports System.Windows.Documents 
Imports System.Windows.Media 

Public Class Annotation 
    Inherits Adorner 

    Private _fill As Brush 
    Private _pen As Pen 
    Private _text As FormattedText 
    Private _annotationText as String 

    Public Sub New(ByVal adornedElement As UIElement, ByVal annotationText as String) 
     MyBase.New(adornedElement) 
     _annotationText = annotationText 
     _fill = New SolidColorBrush(Color.FromArgb(&H33, &HB0, &HC4, &HDE)) 
     _fill.Freeze() 
     _pen = New Pen(Brushes.LightSteelBlue, 3.0) 
     _pen.Freeze() 
     _text = New FormattedText(_annotationText, Globalization.CultureInfo.InvariantCulture, FlowDirection.LeftToRight, New Typeface("Verdana"), 11.0, Brushes.Black) 
     Me.IsHitTestVisible = False 
    End Sub 

    Protected Overrides Sub OnRender(ByVal drawingContext As DrawingContext) 
     MyBase.OnRender(drawingContext) 
     Dim adornedRect As New Rect(MyBase.AdornedElement.RenderSize) 
     drawingContext.DrawRectangle(_fill, _pen, adornedRect) 
     drawingContext.DrawText(_text, New Point(0,0)) 
    End Sub 

End Class 

और फिर आप से यह प्रयोग करेंगे:

Private Sub AddAnnotation(ByVal uie As UIElement, ByVal annotationText as String) 
    Dim annotation = New Annotation(uie) 
    Dim adornerLayer = AdornerLayer.GetAdornerLayer(uie, annotationText) 
    adornerLayer.Add(annotation) 
End Sub 

मैं स्थिति और एनोटेशन की वास्तविक उपस्थिति समायोजित करने के लिए आप छोड़ देंगे, लेकिन आप मिल विचार। यह कस्टम नियंत्रण सहित किसी भी UIElement के लिए काम करेगा।

यह एडॉर्नर्स के साथ किए गए किसी अन्य काम के आधार पर कफ जवाब से बाहर था। उपरोक्त कोड संकलित या हो सकता है। मैंने एनोटेशन संपादित करने का कोई तरीका नहीं दिया है, लेकिन आप "Me.IsHitTestVisible = False" लाइन को हटाकर और एडॉर्नर में माउसअप ईवेंट को संभालने से बहुत आसानी से ऐसा कर सकते हैं।

+0

तो दस्तावेज़ बॉक्स में एनोटेशन जैसे दस्तावेज़ों में से कोई भी नियंत्रण के लिए उपलब्ध कराया जा सकता है, आपको लगता है? उस स्पष्टीकरण और कोड स्निपेट के लिए धन्यवाद, मुझे इसे चलाने का प्रयास करें और देखें कि मैं इसे प्राप्त कर सकता हूं या नहीं। – Vin

+0

मैं बॉक्स के बाहर मौजूदा एनोटेशन का उपयोग करने के बारे में सोच नहीं सकता, क्योंकि आपको UIElement के साथ काम करने वाली कुछ चीज की आवश्यकता होगी, क्योंकि यह (और इसके उप-वर्ग) लगभग नियमित रूप से यूआई विकास में आपके साथ क्या व्यवहार करता है। कुछ तीसरे पक्ष की परियोजना हो सकती है, लेकिन मुझे इससे अनजान है। –

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

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