2009-09-20 2 views
2

TextBlock과 Line이 각각 독점적 인 StackPanel에 나란히 있습니다.XAML의 여러 연속 개체에 GradientBrush를 적용하려면 어떻게해야합니까?

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에 적용됩니다. TextBlock과 Line 전체에 동일한 그라디언트를 적용 할 수있는 방법을 찾아야합니다. 이 예에서 텍스트는 주로 파란색이어야하며 줄은 대부분 주황색이어야합니다.

+0

WPF 또는 Silverlight를 사용하고 있습니까? – Sorskoot

+0

지금 WPF. – Giffyguy

답변

2

WPF에서는 비주얼 브러시를 사용할 수 있습니다.

당신의 창 또는 관리 자원에 브러시 리소스를 추가

<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에서 벡터 경로로 변경 한 다음이를 사용하여 그라디언트 위에 클리핑 패스를 만들 수 있다고 생각합니다. 또는 선과 마찬가지로 텍스트 벡터 경로를 사용하여 배경색 제한없는 높이의 테두리와 투명한 채우기를 벡터 자체에 사용하십시오.

많은 문제가있는 것처럼 보입니다. 세 번째 색상을 병합하여 두 가지를 병합하는 방법에 대해 생각해 보셨습니까? 예를 들어 텍스트 블록이 파란색에서 주황색으로 바뀌면 오렌지색 줄이 배경색으로 바뀝니다. 훨씬 적은 노력으로 비슷한 효과를 얻을 수 있습니다.

관련 문제