2

考虑以下LinearGadientBrush“A”。通常,如果您将画笔指定为矩形的背景,它会用整个渐变填充整个区域,而不管大小。(见 B)。

我们试图说“对于这个特定的控件,只使用画笔的前 xx% 进行填充”,这样我们就可以实现基于百分比的渐变填充,就像在“C”中一样。

在此处输入图像描述

注意:我们知道我们将负责显示哪个百分比,因为系统无法自动计算百分比代表什么。

我们目前这样做的方式显示在“D”中。我们以所需大小的 100% 定义一个矩形(因此填充为 100%),然后将其放在另一个控件中并左对齐。然后我们将外部控件设置ClipsToBounds为 true,并将其宽度设置为内部矩形宽度的所需百分比。(参见 D)这种方法有效,但在可视化树中添加了额外的元素,如果可能,我们会尝试消除这些元素。

4

2 回答 2

1

使用 LinearGradientBrush 的 EndPoint 属性。在你的情况下,如果你设置EndPoint="2,0"你应该得到你想要的结果。

如果您需要做一些更动态的事情,您可以将一个点对象绑定到 EndPoint 属性。如果将值设置为 1,0,它将显示 100% 的渐变或 2,0 以显示渐变的前 50%。

StartPoint允许您在渐变的另一侧做同样的事情。

于 2013-10-15T06:11:30.233 回答
1

找到了。这是画笔的 MappingMode。如果将其设置为 Absolute,它将以实际坐标呈现,而不是控件本身的百分比,这意味着如果您的“全”宽度为 240 单位,则将终点设置为 240。(注意 GradientStop 偏移始终StartPoint 和 EndPoint 之间距离的百分比。)

缺点是每个要渲染的控件的“宽度”需要一个画笔,这意味着如果您有 10 个 200 单位宽的条形图和 6 个 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>
于 2013-10-15T07:34:07.040 回答