1

我创建了一个自定义按钮控件。基本上是一个按钮矩形,但在矩形内有两个区域具有不同的行为。出于这个原因,我只想为特定区域绘制热压状态,而不是孔按钮。

我目前的方法是使用ButtonRenderer.DrawButton(...)空文本绘制基本按钮,如果需要,绘制热或按下状态,最后绘制文本。到目前为止一切顺利,但我如何获得热/压制状态的(渐变)颜色?

我试过了SystemColorsKnownColorsVisualStyleRenderer.GetColor(ColorProperty.XYZ)似乎没有一个匹配?如何从主机系统中读取这些颜色?

编辑:
下面的示例图片:

在此处输入图像描述

在这个win7屏幕截图的情况下,我想要热键按下按钮状态的颜色 - (浅)蓝色。如果放大,您可以看到上半部分和下半部分都使用了轻微的颜色渐变。

最后一个按钮显示了我想要完成的事情。

当然,我可以从屏幕截图中提取颜色并对其进行硬编码或使用建议的图像,但这仅适用于这个特定系统,不是吗?

4

1 回答 1

0

谢谢你的回答,吉米。

根据您链接的 SO 问题的接受答案,我检查了ButtonBaseAdapterButtonStandardAdapter. 正如您还提到的,ButtonRenderer.DrawButton调用VisualStyleRenderer.DrawBackground本机 APIUxTheme.DrawThemedBackground来绘制按钮的调用 - 颜色确定发生在内部。这个本机 API 调用还绘制了按钮边框,这就是我不能使用它的原因。

但我能够以一种不寻常的方式解决我的问题,但它确实有效。

我将两个相关状态(热和按下)渲染到位图并使用.GetPixel. 在我从提取的颜色中OnPaint创建-instances 并在普通按钮的特定区域上绘制热/按下效果。LinearGradientBrush

它与普通按钮的行为完全相同(对于两种状态,边框颜色也会发生变化),但我认为如果我只为按钮的一部分更改边框颜色(热/按下效果是显示)以匹配正常的按钮行为...

如果没有其他答案或解决方案出现,我会在几天后将此帖子标记为答案...

于 2018-06-06T11:09:02.963 回答