2009-09-20 20 views
2

我有一个TextBlock和一条线在他们自己的专属StackPanel中坐在一起。如何将一个GradientBrush应用于XAML中的多个连续对象?

我需要将我的LinearGradientBrush散布在两个对象上,而不是单独为它们着色。

我的项目目前看起来是这样的:

http://img188.imageshack.us/img188/1268/seperategradients.png

<StackPanel Orientation="Horizontal"> 

    <TextBlock VerticalAlignment="Bottom"> 
     SomeTextContent 
     <TextBlock.Foreground> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> 
       <GradientStop Offset="0" Color="Blue" /> 
       <GradientStop Offset="1" Color="Orange" /> 
      </LinearGradientBrush> 
     </TextBlock.Foreground> 
    </TextBlock> 

    <Line VerticalAlignment="Bottom" X2="100"> 
     <Line.Stroke> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="1,0"> 
       <GradientStop Offset="0" Color="Blue" /> 
       <GradientStop Offset="1" Color="Orange" /> 
      </LinearGradientBrush> 
     </Line.Stroke> 
    </Line> 

</StackPanel> 

如图所示,梯度从线应用于TextBlock的seperately。我需要找到一种方法来一次性在TextBlock和Line上应用渐变 - 就好像它们完全是同一个对象一样。在这个例子中,文本应该大部分是蓝色的,并且该行应该大部分是橙色的。

+0

你使用的是WPF还是Silverlight? – Sorskoot 2009-09-22 10:46:37

+0

WPF此刻。 – Giffyguy 2009-09-22 19:09:48

回答

2

在WPF中,您可以使用Visual Brush。

添加画笔资源到你的窗口或控制的资源:

<Window.Resources>  
    <VisualBrush x:Key="stackPanel"> 
    <VisualBrush.Visual> 
     <StackPanel Orientation="Horizontal"> 
     <TextBlock VerticalAlignment="Bottom"> 
      SomeTextContent   
     </TextBlock> 
     <Line VerticalAlignment="Bottom" X2="100" Stroke="black"/>  
     </StackPanel> 
    </VisualBrush.Visual> 
    </VisualBrush> 
</Window.Resources> 

接下来,应用刷到rectange的opacitymask,例如:

<Rectangle OpacityMask="{DynamicResource stackPanel}"> 
    <Rectangle.Fill> 
     <LinearGradientBrush EndPoint="1.0,0.5" StartPoint="0,0.5"> 
     <GradientStop Color="Blue" Offset="0"/> 
     <GradientStop Color="Orange" Offset="1"/> 
     </LinearGradientBrush> 
    </Rectangle.Fill> 
    </Rectangle> 

你可以把文成也是一条路径,但是你将失去改变文本的能力。

2

你的问题是,文本不是一个向量,所以不能与该行结合(我知道的任何方式)。

我相信可以将文本更改为Expression Blend中的矢量路径,然后使用它在渐变上创建剪切路径。或者,像使用文本向量路径一样,使用背景颜色无限制高度的边框和向量本身的透明填充。

似乎很多麻烦去。你有没有想过使用第三种颜色来合并这两种颜色?例如,文本块从蓝色渐变为橙色,然后在橙色线条上渐变为背景色。你可能能够以更少的努力获得类似的效果。

相关问题