2008-10-09 10 views
5

यदि मेरे पास किसी भी आकार या आकार की दृश्य वस्तुओं की संख्या के साथ कैनवास था, तो मैं विजुअल ऑब्जेक्ट को प्रोग्रामेटिक रूप से हाइलाइट/रूपरेखा कैसे करूं?मैं WPF में विज़ुअल ऑब्जेक्ट को हाइलाइट/रूपरेखा कैसे बना सकता हूं?

क्या मेरी मदद करने के लिए WPF में कुछ बनाया गया है?

उत्तर

5

अन्य उत्तरों में टिप्पणियां पढ़ने के बाद - जिसमें आप बताते हैं कि आप दृश्य के आकार के अनुरूप रूपरेखा चाहते हैं - मैं केवल सुझाव दे सकता हूं कि आप BitmapEffects पर एक नज़र डालें। एक बाहरी चमक प्रभाव के लिए एक है।

दृश्यों को डुप्लिकेट करना शायद कम कुशल होगा, और संभवतः उन वस्तुओं के अन्य पहलुओं, जैसे कि किसी भी बाइंडिंग के कारण जटिलताओं का उत्पादन होगा।

संपादित करें: .NET 4.0, BitmapEffects संपत्ति और BitmapEffect कक्षा में अप्रचलित हैं। आपको एक अपवाद फेंक दिया जाएगा। इसके बजाए, अब आपके पास System.Windows.Media.Effects.Effect वर्ग और इसके व्युत्पन्न वर्ग हैं, साथ ही Visual.VisualEffect जैसी गुणों के साथ।

+0

लॉल, मैंने बस यह पता लगाया और इसे पोस्ट करने वाला था। मुझे लगता है कि आप प्रतिनिधि मिलते हैं। – Dylan

+0

व्ही। खुशी है कि आप सही जगहों पर देख रहे थे। :) –

+0

अच्छा सुझाव, मुझे नहीं पता कि मैंने पहले इसके बारे में क्यों नहीं सोचा था ... विशेष रूप से दिया गया कि मैंने दूसरे दिन प्रभाव डाला है। बिटमैपफेक्ट्स के बारे में इंगित करने के लिए एक बात यह है कि वे एक ज्ञात प्रदर्शन समस्या हैं। तो, इसके लिए बाहर देखो। – cplotts

1

यदि आप उन विज़ुअल ऑब्जेक्ट्स को सीमा में लपेटते हैं ... और डिफ़ॉल्ट रूप से अस्पष्टता 0 बनाते हैं ... तो जब भी आपको आवश्यकता हो तो आप ओपेसिटी को 1 तक प्रोग्राम कर सकते हैं।

क्या इससे मदद मिलती है?

+0

क्या सीमा हमेशा एक आयत होगी, या क्या यह अंतर्निहित वस्तु का आकार लेगा? – Dylan

+0

मेरे अपने प्रश्न का उत्तर देने के लिए, सीमा एक वर्ग रहेगी। हालांकि यह काम कर सकता है, मैं रूपरेखा को वस्तु वस्तु के समान आकार के रूप में देख रहा हूं। – Dylan

+0

उस स्थिति में, क्या आप दृश्य (या बाहरी गैर-आयताकार 'सीमा' दृश्य को डुप्लिकेट कर सकते हैं), लेकिन इसे थोड़ी अधिक चौड़ाई और थोड़ी अधिक ऊंचाई दें (ताकि यह सीमा की तरह दिखाई दे)। और फिर, ज़ाहिर है, उपरोक्त अस्पष्टता चाल का उपयोग करें? क्या इससे काम हो जायेगा? – cplotts

5

जोएल बिटमैपफेक्ट्स का उपयोग करने के बारे में एक महान सुझाव है।

हालांकि, यदि आप .NET 3.5 SP1 का उपयोग कर सकते हैं, तो मैं आपको GPU द्वारा प्रदत्त प्रभाव पर ले जाऊंगा। तो, UIElement.BitmapEffect का उपयोग करने के बजाय, आप UIElement.Effect का उपयोग करेंगे। .NET 3.5 SP1 में दो GPU प्रभाव हैं: BlurEffect और DropShadowEffect। आप अपने स्वयं के जीपीयू प्रभाव भी बना सकते हैं ... और यह वह जगह है जहां आप शेडरफेक्ट का उपयोग करेंगे।

अधिक जानकारी के लिए ग्रेग Schechter के ब्लॉग पोस्ट series देखें।

यहाँ प्रभाव है कि मैं सिर्फ कुछ दिन पहले लागू किया पर माउस के लिए कोड का एक टुकड़ा है (यह वास्तव में ऊपर एक तरह से किया जा रहा है ShadowDepth 0 की वजह से एक बाहरी चमक बिटमैप प्रभाव की तरह दिखाता है, लेकिन नहीं वास्तव में):

<Path 
    x:Name="mouseOverEffect" 
    Width="80" 
    Height="43.916" 
    Stretch="None" 
    Fill="#FFFFFFFF" 
    Opacity="0" 
> 
    <Path.Data> 
     <PathGeometry FillRule="Nonzero"> 
      <PathFigure IsClosed="True" StartPoint="39.9592899612151,25.9913931634531"> 
       <LineSegment Point="80.0000001464848,43.9159987905149"/> 
       <LineSegment Point="39.9513899394755,4.97379893856246E-14"/> 
       <LineSegment Point="1.77635636294422E-15,43.9159987905149"/> 
       <LineSegment Point="39.9592899612151,25.9913931634531"/> 
      </PathFigure> 
     </PathGeometry> 
    </Path.Data> 
    <Path.Effect> 
     <DropShadowEffect 
      Color="#FFFFFFFF" 
      BlurRadius="10" 
      ShadowDepth="0" 
     /> 
    </Path.Effect> 
</Path> 
+0

दुर्भाग्यवश, मैं अभी तक एसपी 1 का उपयोग करने में सक्षम नहीं हूं क्योंकि हमारे कुछ ग्राहक बहुत प्रतिबंधित (यानी सरकार) वातावरण में हैं। – Dylan