2010-04-15 10 views
12

डब्लूपीएफ हिट परीक्षण बहुत अच्छा है लेकिन हिट जोन का विस्तार करने के लिए मुझे मिली एकमात्र विधि है अपने ऑब्जेक्ट के चारों ओर एक पारदर्शी पैडिंग क्षेत्र डालना। मुझे पथ ऑब्जेक्ट के चारों ओर एक पारदर्शी क्षेत्र जोड़ने के लिए कोई विधि नहीं मिल रही है। पथ बहुत पतला है और यदि उपयोगकर्ता पथ के पास क्लिक करता है तो मैं हिट परीक्षण सक्षम करना चाहता हूं। मैं नीचे दी गई छवि की तरह एक पारदर्शी क्षेत्र के साथ पथ वस्तु के विस्तार की कोई विधि नहीं मिल सकता है: मैं एक आंशिक रूप से पारदर्शी स्ट्रोक ब्रश इस्तेमाल किया करने की कोशिश की alt text http://img175.imageshack.us/img175/6741/linepadding.pngपथ ऑब्जेक्ट के लिए WPF हिट परीक्षण क्षेत्र का विस्तार कैसे करें

लेकिन मैं समस्या यहाँ वर्णित में भाग: How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?

मैंने अपनी लाइन पर एक एडोर्नर डालने की भी कोशिश की लेकिन डब्ल्यूपीएफ एंटी-एलाइजिंग एल्गोरिदम की वजह से, जब मैं अपने कैनवास में ज़ूम करता हूं और अन्य ऑब्जेक्ट्स के साथ हस्तक्षेप करता हूं तो खराब तरीके से स्थिति में हस्तक्षेप होता है।

हिट परीक्षण क्षेत्र का विस्तार करने के लिए कोई सुझाव अत्यधिक सराहना की जाएगी।

धन्यवाद, कुमार

उत्तर

7

Path.Data एक ज्यामिति वस्तु है।

GetFlattenedPathGeometry(Double, ToleranceType) 
GetOutlinedPathGeometry(Double, ToleranceType) 
GetRenderBounds(Pen, Double, ToleranceType) 

मुझे लगता है कि GetRenderBounds आपके लिए सबसे अच्छा काम करेगा: ज्यामिति वर्ग कई तरीकों मदद कर सकते हैं आप सहिष्णुता के साथ परीक्षण मारा है।

एक बार जब आप ज्यामिति (साथ ही कुछ चौड़ाई) है आप कॉल कर सकते हैं

geometry.FillContains(Point, Double, ToleranceType) 

या

geometry.StrokeContains(Pen, Point, Double, ToleranceType) 

है, उन सभी में से आपको चाहिए धुन अपने हिट परीक्षण से वांछित हिट;

+0

+1 ने मुझे इसी तरह की समस्या पर मदद की ... – SvenG

3

आप पथ को एक पारदर्शी Border के अंदर लपेट सकते हैं।

2

डब्ल्यूपीएफ में आप अपने ज्यामिति डेटाबेस के साथ पहले (एलिमेंट बाइंडिंग का उपयोग करके) के साथ एक और पथ बना सकते हैं, लेकिन पारदर्शी ब्रश और मोटाई में वृद्धि के साथ।

अधिक या इस तरह कम कुछ:

<Path x:Name="backPath" Data="{Binding Data, ElementName=mainPath}" StrokeThickness="10" Stroke="Transparent"/> 
<Path x:Name="mainPath" Data="{Binding DataFromViewModel}" StrokeThickness="1" Stroke="Red"/> 

ध्यान दें कि मुख्य पथ इतना है कि यह शीर्ष पर प्रदान की गई है, XAML में बाद आता है।

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