Cum pot crea o imagine în gresie în cod care este, de asemenea, legat de date?

Curent în cod-în spatele, am crea dinamic un control wpf Image și lega sursa la o databinding personalizat. În final, acest lucru va fi adăugat la o rețea pentru a furniza o imagine de fundal:

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

Problema este că vreau să pun această imagine, astfel încât singurul mod pe care îl pot găsi pentru a face acest lucru este de a crea un ImageBrush și a seta proprietatea TileMode. Dar nu există nici o funcție "SetBinding", așa cum pot realiza ceea ce am nevoie?

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

Există vreo altă modalitate de a crea o imagine de genul asta în spatele codului?

1
Ce grilă ai vrut să spui - "layout grid" sau "grid de date"?
adăugat autor Dennis, sursa
O structură de rețea standard. În prezent, plasez controlul Imagine în grila, dar în mod ideal aș vrea să creez un ImageBrush și să configurez fundalul grilajului.
adăugat autor Ben McIntosh, sursa

3 răspunsuri

Nu trebuie să schimbați nimic decât să utilizați BindingOperations:

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

Și trebuie să definiți Viewport-ul și să umpleți fereastra de vizualizare cu peria:

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
adăugat
Mulțumesc, acest lucru îmi răspunde cel mai direct la întrebarea mea. BindingOperations.SetBinding() a fost cheia aici. În loc să folosesc un dreptunghi, am setat fundalul grila mea ca fiind acea imagine.
adăugat autor Ben McIntosh, sursa

Am incercat urmatoarele: În debugmode, proprietatea VisualBrush este setată corect. Desigur, imaginea este afișată ca o imagine întinsă. Nu știu de ce. Sper ca ajuta.

proprietatea

        public TileMode Mode { get; set; }

legarea

        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
adăugat

Nu-mi place codul în urmă, așa că e greu pentru mine să scriu rapid codul din spate Iată eșantionul de marcare:


    
        
        
    

    
        
        
    

    
        
    

În locul imaginii codificate greu ( ImageSource = "Sample.jpg" ) puteți scrie orice expresie obligatorie ca aceasta: ImageSource = "{Binding MyBackgroundImageUri}" .

0
adăugat