System.Windows.Media.DrawingContext.DrawImage() 在阴影等半透明区域中显示



我有一个WPF Button子类,它覆盖OnRender((以根据当前状态绘制几个位图之一。简化(1 位图(代码如下所示...

protected override void OnRender(DrawingContext context)
{
context.DrawImage(_MyBitmapSource, new Rect(0, 0, Width, Height));
}

每个位图中阴影的半透明黑色像素错误地呈现为半透明白色。

同样,如果我将这些图像之一设置为背景画笔,也会发生同样的事情。

对于图像控件,将同一图像设置为源看起来正确,因此我知道 WPF 能够正确绘制阴影。我显然缺少一些东西——可能是在调用 DrawImage(( 之前需要在 OnRender(( 中设置的其他东西。

PNG图像没有什么特别之处。只是为了确保这不是问题,我从 images.google.com 下载了一些PNG,它们都有相同的问题。

在其他框架中,Paint 或 Render 等事件通常用于更改控件的外观。

WPF 具有外观控件 - 您可以将 WPF 控件模板化为几乎可以想象的任何内容。这是相当令人麻木的,非常强大,并且使某些事情比其他框架更容易。

因此,创建具有按钮行为的图像的"传统"wpf方法只是将按钮的模板设置为图像。然后,您可以通过代码或标记设置 imagessource。Markkup 通常是 WPF 开发人员的首选,您有多个选项,包括数据触发器、触发器、模板和视觉状态。

这种方法的其他好处是,标记允许您立即了解将会发生什么,并且您可以相当轻松地简化它以进行任何故障排除。

最新更新