2012-05-25 55 views
1

當前代碼隱藏,我動態地創建一個WPF圖像控件,並將源綁定到自定義數據綁定。這將最終被添加到網格提供背景圖片:如何在數據綁定的代碼中創建平鋪圖像?

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

的問題是,我想平鋪這個形象,所以我能找到這樣做的唯一方法是創建一個圖像刷,並設置TileMode屬性。但是沒有「SetBinding」函數,那麼我該如何實現我所需要的?

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

是否有任何其他方式來在代碼隱藏中像這樣平鋪圖像?

+0

你是指什麼網格 - 「網格佈局」還是「數據網格」? – Dennis

+0

標準網格佈局。目前,我將Image控件放置在網格中,但我最好創建一個ImageBrush並將網格背景設置爲此。 –

回答

3

你不需要改變任何東西,但使用BindingOperations:

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; 
+0

謝謝,這最直接地回答我的問題。 BindingOperations.SetBinding()是這裏的關鍵。我只是將我的Grid的背景設置爲ImageBrush,而不是使用矩形。 –

0

我不喜歡背後的代碼,所以我很難快速編寫代碼隱藏示例。
這裏的標記示例:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 

    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <Grid.Background> 
     <ImageBrush ImageSource="Sample.jpg" TileMode="Tile" Viewport="0,0,0.5,0.5"/> 
    </Grid.Background> 
</Grid> 

而不是硬編碼的圖像(ImageSource="Sample.jpg")你可以寫任何綁定表達式是這樣的:ImageSource="{Binding MyBackgroundImageUri}"

1

我試過以下。在debugmode中,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;