代码之家  ›  专栏  ›  技术社区  ›  Wonko the Sane

一次对两个对象应用画笔

  •  1
  • Wonko the Sane  · 技术社区  · 14 年前

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

    alt text

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

    alt text

    我肯定我忽略了一些简单快捷的事情…

    谢谢, WTS

    3 回复  |  直到 14 年前
        1
  •  4
  •   Timores    14 年前

    我是这样做的:

    <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

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

        2
  •  1
  •   marr75    14 年前

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

    如果您不熟悉这个类的ObjectDataProvider和方法参数绑定,我建议您 here here

        3
  •  0
  •   Jérémie Bertrand Alex Kumbhani    14 年前

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