一次将画笔应用于两个对象

时间:2010-09-13 14:33:32

标签: wpf brush lineargradientbrush

我想一次将一个Brush(在这种情况下为LinearGradientBrush)应用于两个或多个对象(TextBlocks)。我想要的效果是这样的:

alt text

修改 我不能简单地将相同的画笔应用于两个对象,因为这将使它们都开始变为红色并变为蓝色(而不是以紫色阴影开始的第二个)。

alt text

我确定我很容易忽视一些事情......

谢谢, WTS

3 个答案:

答案 0 :(得分:4)

我是这样做的:

<Border Height="100" Width="600" >
    <Border.OpacityMask>
        <VisualBrush>
            <VisualBrush.Visual>
                <StackPanel>
                    <TextBlock FontSize="85.333" FontFamily="Calibri" TextAlignment="Right">
                        The big first line
                    </TextBlock>
                    <TextBlock TextWrapping="Wrap" Margin="0,0,8,0" FontSize="32" FontFamily="Calibri" Text="The small second line" TextAlignment="Right" />
                </StackPanel>
            </VisualBrush.Visual>
        </VisualBrush>
    </Border.OpacityMask>
    <Border.Background>
        <LinearGradientBrush EndPoint="0.974,0.49" StartPoint="0,0.457">
            <GradientStop Color="#FFFD0202"/>
            <GradientStop Color="#FF0234FD" Offset="1"/>
        </LinearGradientBrush>
    </Border.Background>
</Border>

因此,一个边框的背景充满了从蓝色到红色的渐变。渐变的唯一可见部分是不透明蒙版中的文本。

也许比边界更简单的控制会更好。 alt text

剩下的问题是必须明确调整容器控件的大小,因为它没有内容。

答案 1 :(得分:1)

如何使用ObjectDataProvider公开一个方法,该方法根据3个整数,画笔的起始x位置,画笔的当前x位置以及画笔的结束x位置(我可以)显示返回所需画笔的方法查看您可能需要四个参数的用例,x start,x end,x current start,x current end,但3参数适用于您要求的情况)。您可以根据控件的布局静态分配这些整数,也可以使用数据绑定参数。

如果您不熟悉ObjectDataProvider并绑定此类的方法参数,我建议转到herehere

答案 2 :(得分:0)

将画笔声明到窗口(或应用程序)资源中,并使用画笔绑定两个文本块的Foreground属性。