1

我想一次将画笔(在本例中为 LinearGradientBrush)应用到两个或多个对象(TextBlocks)。我想要的效果是这样的:

替代文字

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

替代文字

我确定我忽略了一些快速简单的东西......

谢谢,wTS

4

3 回答 3

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>

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

也许比边界更简单的控制会更好。 替代文字

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

于 2010-09-13T16:27:06.197 回答
1

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

如果你不熟悉 ObjectDataProvider 和绑定到这个类的方法参数,我建议去这里这里

于 2010-09-13T15:19:13.867 回答
0

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

于 2010-09-13T14:37:35.957 回答