1

現在、コードビハインドでは、WPFイメージコントロールを動的に作成し、ソースをカスタムデータバインディングにバインドします。これは最終的にグリッドに追加され、背景画像を提供します。

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

問題は、この画像を並べて表示したいということです。そのため、これを行うために見つけることができる唯一の方法は、ImageBrushを作成し、TileModeプロパティを設定することです。しかし、「SetBinding」関数がないので、どうすれば必要なことを達成できますか?

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

このような画像をコードビハインドで並べて表示する他の方法はありますか?

4

3 に答える 3

4

何も変更する必要はありませんが、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;
于 2012-05-25T09:13:11.767 に答える
1

私は以下を試しました。デバッグモードでは、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;
于 2012-05-25T06:55:18.880 に答える
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}"

于 2012-05-25T06:52:02.940 に答える