0

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

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

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

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

对于图像控件,将相同的图像设置为 Source 看起来是正确的,所以我知道 WPF 能够正确绘制阴影。我显然遗漏了一些东西——可能是在调用 DrawImage() 之前需要在 OnRender() 中设置的其他东西。

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

4

1 回答 1

0

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

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

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

这种方法的其他好处是标记使您可以立即了解会发生什么,并且您可以相当容易地简化它以解决任何问题。

于 2019-09-20T09:29:36.740 回答