2010-12-21 13 views
6

मैं ImageBrush साथ एक समस्या है:आकार बदलने के दौरान ImageBrush को स्केल न करें, इसे दोहराएं!

<Window ... > 
    <Grid> 
     <Grid.Background> 
      <ImageBrush ImageSource="Controls\Images\notebook_paper_Line.jpg" TileMode="FlipX" 
         Viewport="0,0,1,0.09" /> 
     </Grid.Background>   
    </Grid> 
</Window> 

मैं उपयोगकर्ता विंडो का आकार बदलने जबकि छवि दोहराना चाहते हैं। लेकिन वर्तमान में छवि आकार बदलती है जबकि उपयोगकर्ता आकार बदलती है। (ध्यान दें कि छवि का आकार छोटा है और मैं इसे दोहराने के लिए TileMode और Viewport का उपयोग करता हूं, और इसका आकार बदलते समय समस्या होती है!)।

कोई भी एक्सएएमएल कोड बहुत अच्छा होगा! :)

और मुझे खराब अंग्रेजी के लिए खेद है !!!

उत्तर

13

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

तो यदि आप एक छवि ब्रश टाइल करना चाहते हैं, तो आप व्यूपोर्ट को समायोजित करना चाहेंगे। यदि आप व्यूपोर्ट को 0,0, .5, .5 पर सेट करना चाहते हैं, तो आपको 2 x 2 टाइल किए गए चित्र देखना चाहिए (क्योंकि प्रत्येक टाइल ग्रिड के आकार का 50% x50% होगा), या 0,0,0.25, 0.1 एक 4x10 टाइलिंग, आदि का उत्पादन करेगा ...

हालांकि, यह अभी भी छवि को पुन: सहेजने से नहीं रोकता है। तो आपके मामले में, जो संभवतः आप चाहते हैं वह व्यूपोर्ट को अपनी छवि के आकार में सेट करना है, और RelativeToBoundingBox के बजाय ViewportUnits को निरस्त करने के लिए सेट करना है।

नीचे xaml में मेरे पास 24x24 पिक्सेल छवि है, इसलिए मैंने तदनुसार अपना व्यूपोर्ट सेट किया है। यह ग्रिड के पूर्ण आकार के लिए बार-बार छवि को टाइल करता है। यदि ग्रिड का आकार बदलता है, तो अधिक टाइल्स दिखाई देंगे।

<ImageBrush ImageSource="Images\book_green.png" TileMode="FlipX" 
      Viewport="0,0,24,24" ViewportUnits="Absolute" /> 

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

YEAH! यह वही था जो मैं चाहता हूं, धन्यवाद! :) – Jalal