颜色和SolidColorBrush之间的区别澄清

9

好的,这一直困扰着我,我没有找到任何关于 Color SolidColorBrush 之间差异的明确答案,所以我想知道是否有人能够对此进行解释。

我已经知道用法上的区别,例如我可以在依赖项中使用 SolidColorBrush,就像我说的那样;

<SolidColorBrush x:Key="BlahBrush" Color="#FFFFFFFF"/>
<Border Background="{StaticResource BlahBrush}"/>

但是如果我将同一资源放入EasingColorKeyFrame中,就会像这样;

<EasingColorKeyFrame KeyTime="0" Value="{StaticResource BlahBrush}" />

然后它会吐槽我使用了SolidColorBrush,但是我可以通过将其声明为一种资源链回到Color来绕过这个问题,就像这样:

<Color x:Key="OriginalBlahBrush">#FFFFFFFF</Color>
<SolidColorBrush x:Key="BlahBrush" Color="{StaticResource OriginalBlahBrush}"/>

只使用SolidColorBrushColor属性也可以获得相同的效果,例如:

<SolidColorBrush>
     <SolidColorBrush.Color>
        <Color A="255" R="0" G="0" B="255" />
     </SolidColorBrush.Color>
</SolidColorBrush>

所以我想问的是,Colors和SolidColorBrush类之间的本质区别是什么,以及它们在使用中出现奇怪问题的原因是什么?也就是说,如果它们都只是提供了一个纯色,那么为什么要有System.Windows.Media.Colors和System.Windows.Media.SolidColorBrush之分呢?

好奇的人想知道! :)

3个回答

7

Brush 中的备注部分:

刷子(Brush)用其输出“涂”或“填充”一个区域。不同的刷子有不同类型的输出。一些刷子使用纯色绘制区域,而另一些使用渐变、图案、图像或绘图进行绘制。以下列表描述了不同类型的 WPF 刷子:

•SolidColorBrush:使用纯色为区域上色。

•LinearGradientBrush:使用线性渐变为区域上色。

•RadialGradientBrush:使用径向渐变为区域上色。

•ImageBrush:使用图像(由 ImageSource 对象表示)为区域上色。

•DrawingBrush:使用绘图为区域上色。该绘图可以包括矢量和位图对象。

•VisualBrush:使用 Visual 对象为区域上色。VisualBrush 可以让您将应用程序中的内容复制到另一个区域;对于创建反射效果和放大屏幕部分非常有用。


但是如果它引用单一的实心颜色,为什么像框架这样的东西会在意呢?我可以理解如果Brush指定了其他颜色之一,但我认为它应该接受实心颜色,无论是Brush还是Color? :/ - Chris W.
抱歉,我不明白你的意思。在WPF中,你只能使用Brushes来填充(或绘制笔画),而不能使用Colors。因此,为了用单一颜色填充一个区域,你需要一个特殊的Brush,即SolidColorBrush。 - Clemens
1
其实我认为你已经解释得很清楚了,基本上Color只需要一个值,而Brush则需要重复填充“刷子”区域的内容。我接受这个解释,谢谢! - Chris W.

2

我的理解如下。

  • 颜色代表特定的颜色 { 红色, 蓝色, ... }等等。
  • SolidColorBrush 表示特定的颜色以及使用颜色来绘制区域的能力。
  • 颜色是一个结构数据类型,它保存了颜色的详细信息。
  • SolidColorBrush 是一个包含 Color 对象并添加不透明度和变换属性的类。
  • Colors 列出了预设数量的颜色。 Color c = Colors.Red;
  • Brushes 列出了预设数量的刷子。 SolidColorBrush br = Brushes.Red;
注:Original Answer翻译成"最初的回答"

1

ColorSolidColorBrush的组成部分之一,其中一个构造函数具有Color类型参数。如果您想要填充表单上的某些组件,首先需要创建颜色,然后基于该颜色创建SolidColorBrush。就像真正的清晰画笔和调色板一样,您需要浸泡刷子以进行绘画/填充。 Color对象更加“低级”,您可以使用A、R、G、B参数设置一些颜色。 而SolidColorBrushes是用于填充对象的刷子类型(从System.Windows.Media.Brush继承)。您可以将多种颜色组合成一个刷子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接