创建由左,中,右图像组成的画笔,其中中间图像被平铺

时间:2012-09-21 07:42:05

标签: c# wpf visualbrush

我需要在WPF中创建一个用作面板背景的画笔。刷子具有固定的高度但宽度可变。当左图像和右图像被固定时,中间图像需要平铺以填充空间。我尝试使用VisualBrush和带有图像的网格,但它没有正确对齐/缩放。这是一个适用于固定宽度的绘图笔刷。如何使其工作,以便为可变宽度的面板平铺中间图像?

<DrawingBrush x:Key="Background">
    <DrawingBrush.Drawing>
        <DrawingGroup>
                <ImageDrawing Rect="0 0 16 16" ImageSource="Resources/Left.png"/>
                <ImageDrawing Rect="16 0 16 16" ImageSource="Resources/Middle.png"/>
                <ImageDrawing Rect="48 0 16 16" ImageSource="Resources/Right.png"/>
            </DrawingGroup>
        </DrawingGroup>
    </DrawingBrush.Drawing>
</DrawingBrush>

1 个答案:

答案 0 :(得分:0)

我不确定你是否真的可以这样做,所以作为一种替代方法,使用Binding和Converter生成一个新的画笔以适合合适的大小。

<Grid VerticalAlignment="Center" Height="16" Margin="16,0" HorizontalAlignment="Stretch"
    Background="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self},Converter={StaticResource widthToBrushConverter}}"/>

和Width to brush converter

public class WidthToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var width = (double)value;

        var result = new DrawingBrush();
        var group = new DrawingGroup();
        result.Drawing = group;

        group.Children.Add(new ImageDrawing(new BitmapImage(new Uri(@"Resources\Left.png", UriKind.Relative)), new Rect(0, 0, 16, 16)));
        group.Children.Add(new ImageDrawing(new BitmapImage(new Uri(@"Resources\Centre.png", UriKind.Relative)), new Rect(16, 0, width, 16)));
        group.Children.Add(new ImageDrawing(new BitmapImage(new Uri(@"Resources\Right.png", UriKind.Relative)), new Rect(16 + width, 0, 16, 16)));
        return result;
    }

<强>更新 唯一的问题是这似乎不起作用。我只是得到一个黑屏