मैं कोड में एक टाइल वाली छवि कैसे बना सकता हूं जो डाटा-बाउंड भी है?

कोड-बैक में वर्तमान, मैं गतिशील रूप से एक wpf छवि नियंत्रण बनाता हूं और स्रोत को एक कस्टम डेटाबेस में बांधता हूं। अंततः पृष्ठभूमि छवि प्रदान करने के लिए इसे ग्रिड में जोड़ा जाएगा:

Image myImage = new Image();
myImage.Stretch = Stretch.UniformToFill;
myImage.SetBinding(Image.SourceProperty, myBinding);

समस्या यह है कि मैं इस छवि को टाइल करना चाहता हूं, इसलिए ऐसा करने का एकमात्र तरीका यह है कि एक छवि ब्रश बनाना और टाइलमोड प्रॉपर्टी सेट करना है। लेकिन कोई "सेटबाइंडिंग" फ़ंक्शन नहीं है, तो मुझे जो चाहिए वह पूरा कैसे कर सकता हूं?

ImageBrush myBrush = new ImageBrush();
myBrush.TileMode = TileMode.Tile;
// Can't do this!
myBrush.SetBinding(ImageBrush.SourceImageProperty, myBinding);

कोड-पीछे में इस तरह की छवि को टाइल करने के अन्य तरीके हैं?

1
जोड़ा संपादित
विचारों: 1
आपका क्या मतलब था - "ग्रिड लेआउट" या "डेटा ग्रिड"?
जोड़ा लेखक Dennis, स्रोत
एक मानक ग्रिड लेआउट। वर्तमान में, मैं छवि नियंत्रण को ग्रिड में रखता हूं, लेकिन मैं आदर्श रूप से एक छवि ब्रश बनाना चाहता हूं और इसमें ग्रिड पृष्ठभूमि सेट करना चाहता हूं।
जोड़ा लेखक Ben McIntosh, स्रोत

3 उत्तर

आपको कुछ भी बदलने की जरूरत नहीं है लेकिन बाइंडिंगऑपरेशंस का उपयोग करें:

BindingOperations.SetBinding(myBrush, ImageBrush.ImageSourceProperty, myBinding);

और आपको व्यूपोर्ट को परिभाषित करने और ब्रश के साथ व्यूपोर्ट भरने की आवश्यकता है:

MyBrush.Viewport = new Rect(0, 0, 0.1, 0.1);
// Create a rectangle and paint it with the ImageBrush.
Rectangle rec = new Rectangle();
rec.Stroke = Brushes.LimeGreen;
rec.StrokeThickness = 1;
rec.Fill = MyBrush;
4
जोड़ा
धन्यवाद, यह मेरे प्रश्न का सबसे सीधे जवाब देता है। बाइंडिंगऑपरेशंस.SetBinding() यहां कुंजी थी। आयताकार का उपयोग करने के बजाय, मैंने बस अपनी ग्रिड की पृष्ठभूमि को उस छविब्रश के रूप में सेट किया है।
जोड़ा लेखक Ben McIntosh, स्रोत

मैंने निम्नलिखित कोशिश की है। डीबगोड में VisualBrush की प्रॉपर्टी सही ढंग से सेट की गई है। निश्चित रूप से छवि एक विस्तारित छवि के रूप में दिखाया गया है। पता नहीं क्यों। आशा करता हूँ की ये काम करेगा।

संपत्ति

        public TileMode Mode { get; set; }

बाइंडिंग

        VisualBrush myBrush = new VisualBrush();

        Uri uri = new Uri("picture.png", UriKind.RelativeOrAbsolute);
        ImageSource src = new BitmapImage(uri);
        myBrush.Visual = new Image() { Source = src };

        this.Mode = TileMode.Tile;

        Binding bind = new Binding() { Source = Mode };
        BindingOperations.SetBinding(myBrush, VisualBrush.TileModeProperty, bind);

        this.Background = myBrush;
1
जोड़ा

मुझे कोड पीछे पसंद नहीं है, इसलिए कोड-पीछे नमूना लिखना मेरे लिए मुश्किल है।
यहां मार्कअप नमूना है:


    
        
        
    

    
        
        
    

    
        
    

कड़ी-कोडित छवि ( ImageSource = "Sample.jpg" ) के बजाय आप इस तरह की बाध्यकारी अभिव्यक्ति लिख सकते हैं: ImageSource = "{बाइंडिंग MyBackgroundImageUri}"

0
जोड़ा