考虑以下LinearGadientBrush
,'A'。通常,如果将该画笔指定为矩形的背景,则无论大小如何,它都会使用整个渐变填充整个区域。 (见B)。
我们试图说'对于这个特定的控件,只使用画笔的第一个xx%进行填充',这样我们就可以实现基于百分比的渐变填充,就像'C'一样。
注意:我们知道我们将负责显示哪个百分比,因为系统无法自动计算百分比代表什么。
我们目前正在这样做的方式显示在'D'中。我们定义一个100%所需尺寸的矩形(所以填充是100%),然后将它放在另一个控件中并左对齐它。然后,我们将外部控件的ClipsToBounds
设置为true,并将其宽度设置为内部矩形宽度的所需百分比。 (参见D)这种方法有效,但在视觉树中增加了额外的元素,如果可能的话,我们试图消除这些元素。
答案 0 :(得分:1)
使用LinearGradientBrush的EndPoint属性。在你的情况下,如果你设置EndPoint="2,0"
,你应该得到你想要的结果。
如果您需要执行更动态的操作,可以将点对象绑定到EndPoint属性。如果将值设置为1,0,则将显示100%的渐变,或者2.0以显示渐变的前50%。
StartPoint
允许您在渐变的另一侧执行相同的操作。
答案 1 :(得分:1)
找到它。这是画笔的MappingMode。如果将其设置为绝对值,它将以实际坐标呈现,而不是以控件本身的百分比呈现,这意味着如果“完整”宽度为240个单位,则将结束点设置为240.(请注意,GradientStop偏移始终为StartPoint和EndPoint之间距离的百分比。)
下方是你想要渲染的每个'宽度'控件需要一个画笔,这意味着如果你有200个单位宽的十个条形图和150个单位宽的六个条形图,你需要两个画笔,一个对于每个宽度。
以下是MSDN的一个例子......
<!-- The MappingMode property is set to "Absolute" which specifies that the coordinate
system used for the StartPoint and EndPoint properties is not relative to the
Brush output area. Values are interpreted directly in local space. -->
<!-- Create a brush that is absolutely 200 units wide -->
<LinearGradientBrush MappingMode="Absolute"
StartPoint="0,0" EndPoint="200,0">
<GradientStop Color="Yellow" Offset="0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1" />
</LinearGradientBrush>