2

私は TextBlock と Line をそれぞれ専用の StackPanel に並べて配置しています。

個別にシェーディングするのではなく、2 つのオブジェクトに 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>

示されているように、グラデーションは Line とは別に TextBlock に適用されます。TextBlock と Line にグラデーションを 1 回のパスで適用する方法を見つける必要があります - それらが完全に同じオブジェクトであるかのように。この例では、テキストはほとんど青く、線はほとんどオレンジ色にする必要があります。

4

2 に答える 2

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>

次に、そのブラシを長方形の不透明マスクに適用します。次に例を示します。

  <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>

テキストをパスに変えることもできますが、テキストを変更する機能が失われます。

于 2009-09-22T10:57:08.303 に答える
2

あなたの問題は、テキストがベクトルではないため、線と組み合わせることができないことです(私が知っている方法)。

Expression Blend でテキストをベクター パスに変更し、それを使用してグラデーション上にクリッピング パスを作成することは可能だと思います。または、線の場合と同じようにテキスト ベクター パスを使用して、背景色の無制限の高さの境界線と透明な塗りつぶしをベクター自体に使用します。

行くのが大変なようです。3 番目の色を使用して 2 つをマージすることを考えたことはありますか? たとえば、テキスト ブロックが青色からオレンジ色にフェードし、次にオレンジ色の線で背景色にフェードします。はるかに少ない労力で同様の効果を得ることができるかもしれません。

于 2009-09-22T10:37:00.070 に答える