c# - 创建由左、中、右图像组成的画笔,其中平铺中间图像

标签 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>

最佳答案

我不确定您是否真的可以这样做,因此作为替代方案,使用绑定(bind)和转换器生成新的画笔以适应适当的大小。

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

并在宽度刷转换器

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;
    }

更新 唯一的问题是这似乎不起作用。我只是黑屏

关于c# - 创建由左、中、右图像组成的画笔,其中平铺中间图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526217/

相关文章:

c# - .NET 4.0 中的 Response.Redirect

c# - Excel Interop 只读过滤行

WPF VisualBrush 拉伸(stretch)而不是平铺

wpf - 使用存储在一个固定(流)文档中的 VisualBrush 及时控制快照

c# - 模棱两可的引用

c# 从 json 中获取值

c# - 如何在 Reactive Extension C# 中将 IObserable<bool> 转换为 bool

c# - 即时服务器-客户端通信,C#?

wpf - 组样式标题从不出现

wpf - 如何在WPF中制作反射效果? (来自代码)