2010-02-17 20 views
6

मैं अपने ऐप में विभिन्न चीज़ों के लिए System.Windows.Controls.WebBrowser का उपयोग कर रहा हूं और मैंने देखा है कि वेबब्राउज़र पर दिखाई देने पर सजावट काट दिया जाता है। मुझे एहसास है कि WebBrowser नियंत्रण वास्तव में एक COM घटक के चारों ओर एक रैपर है और शायद अलग-अलग प्रस्तुत करता है, लेकिन मुझे आश्चर्य हुआ कि किसी ने यह पता लगाया है कि इसे कैसे हल किया जाए।वेबब्राउज़र नियंत्रण पर एक एडॉर्नर प्रदर्शित करें

यह समस्या है जो मैं देख रहा हूं। यहां मेरे पास सिर्फ एक नमूना एडोर्नर है जो किसी के शीर्ष कोने (नमूना के रूप में) में एक बड़ा लाल वृत्त खींचना है।

जब मैं इस के साथ WebBrowser सजाना, मैं इस परिणाम मिलता है:

मैं चक्र पूरा देखने की उम्मीद।

यहाँ इस बेकार adorner के लिए कोड है मामला है कि उपयोगी है में,: और

public class SillyAdorner : Adorner 
{ 
    public SillyAdorner(UIElement element) : base(element) 
    { 

    } 
    protected override void OnRender(DrawingContext drawingContext) 
    { 
     drawingContext.DrawEllipse(new SolidColorBrush(Colors.Red), new Pen(), new Point(7, 7), 30, 30); 
     base.OnRender(drawingContext); 
    } 
} 

यहाँ कैसे मैं मेजबान नियंत्रण से OnRender विधि में ब्राउज़र पर लागू है:

protected override void OnRender(DrawingContext drawingContext) 
    { 
     base.OnRender(drawingContext);    
     var layer = AdornerLayer.GetAdornerLayer(browser); 
     layer.Add(new SillyAdorner(browser)); 
    } 

किसी के पास इस के लिए कोई हैक या कामकाज है?

संपादित करें: मैं .NET 4.0 का उपयोग कर रहा हूं, अगर इससे कोई फर्क पड़ता है।

# 2 संपादित करें: WebBrowser HwndHost, जो मैं adorners और hwndsources के बारे में एक या दो सवाल देखा है से विरासत के लिए प्रकट होता है, लेकिन मैं कुछ भी है कि मैं Webcontrol के लिए इसे लागू कर सकता लग रहा है कि नहीं दिखाई दे रहा है, लेकिन उम्मीद है कि यह किसी के लिए उपयोगी जानकारी है।

उत्तर

2

यह airspace issues के कारण होता है। चूंकि वेबब्रोसर एक देशी, गैर-डब्ल्यूपीएफ नियंत्रण है, इसलिए इसके ऊपर एडोर्नर्स (या अन्य WPF सामग्री) को सीधे प्रस्तुत करने का कोई तरीका नहीं है।

ऐसा करने के लिए, आपको किसी प्रकार की एक अलग विंडो का उपयोग करने की आवश्यकता है, और सामग्री को उस अलग विंडो में रखें। इसका आमतौर पर मतलब है कि आपकी मुख्य विंडो के शीर्ष पर एक पारदर्शी WPF विंडो का उपयोग किया जाता है। दुर्भाग्यवश, यह समाधान के एकीकृत के रूप में नहीं होगा क्योंकि एक वास्तविक देशी WPF नियंत्रण प्रदान करेगा।

5

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

+0

हाँ .... मैंने उसे कहीं और देखा होगा। ऐसा लगता है कि ऐसा इसलिए है क्योंकि पॉपअप एक एचडब्ल्यूएन भी है, इसलिए यह आसान है। यहां केवल एक चीज है कि आस-पास की अन्य वस्तुओं को सजाने के लिए सजाए गए सामानों में कटौती होती है। मैं इसे प्रतिबिंबित करने के लिए अपना उत्तर अपडेट करूंगा। हालांकि बहुत अच्छा सुझाव है ... मैं अपने adorner को एक hwnd में लपेटने के बारे में देख सकता हूँ। –

1

अन्य transparent TOP LEVEL overlay window का उपयोग करने का प्रयास करें। केवल विंडोज 2000 या उच्चतर पर समर्थित है, Win9x में स्तरित विंडो नहीं हैं।

3

मेरा ब्लॉग post है library पेश करना मैंने किसी भी एचडब्ल्यूएफ पर एक डब्ल्यूपीएफ एडॉर्नर को लेयर करने के लिए लिखा था। एक साधारण वेब ब्राउज़र डेमो इस तरह दिखता है: snapshot http://i58.tinypic.com/kej3bd.png