我尝试使用应用于按钮背景的画笔并在其上呈现BitmapImage,从而合并图像并将其设置为背景。
RenderTargetBitmap source = new RenderTargetBitmap(Convert.ToInt32(button.RenderSize.Width), Convert.ToInt32(button.RenderSize.Height), 96, 96, PixelFormats.Pbgra32);
DrawingVisual visual = new DrawingVisual();
using (DrawingContext drawingContext = visual.RenderOpen())
{
drawingContext.DrawRectangle(button.Background, null, new Rect(new Point(0, 0), new Point(button.RenderSize.Width, button.RenderSize.Height)));
drawingContext.Close();
source.Render(visual);
}
visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
context.DrawImage(source, new Rect());
context.DrawImage(image, new Rect());
context.Close();
}
source.Render(visual);
但是,我无法将RenderTargetBitmap设置为按钮的Background属性。我甚至不确定这是否是做这种事情的最佳方式。
如果我可以将RenderTargetBitmap转换为画笔,这是最有效的方法吗?
干杯。
答案 0 :(得分:0)
我们有很多方法可以使用代码隐藏来实现这一点,但我会尝试在这里使用XAML代码。这个想法是使用一些DrawingBrush
作为背景。这个画笔需要一些Drawing
。我们可以在这里使用DrawingGroup
,因为它允许我们附加多个图纸。我们关心GeometryDrawing
和ImageDrawing
。 GeometryDrawing
可以使用简单的RectangleGeometry
渲染画笔,而ImageDrawing
可以渲染图像。以下是示例XAML代码,我想您将输入包括输入brush
和输入image
作为一些资源:
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="{StaticResource someBrush}">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0,1,1"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
<ImageDrawing ImageSource="{StaticResource someImage}" Rect="0,0,1,1"/>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
请注意,将上面的画笔用于某些背景时,通常会填充整个元素。所以Rect
在这里并不重要,我们可以将它(对于RectangleGeometry和ImageDrawing)设置为相同的值。但是当你设置一些平铺背景时,那个Rect可能很重要。然后,您应该将其设置为其他值。
在上面的代码中,ImageDrawing
在GeometryDrawing
之后声明,因此它会在GeometryDrawing
之上呈现。这意味着后来宣布的图纸将在之前的图纸之上。这是我在GeometryDrawing
之后声明LinearGradientBrush
(从{绿色到红色呈现ImageDrawing
)的结果,以便您可以看到LinearGradientBrush的透明效果: