一度に 2 つ以上のオブジェクト (TextBlocks) にブラシ (この場合は LinearGradientBrush) を適用したいと思います。私が望む効果は次のようなものです:
編集 両方のオブジェクトに同じブラシを単純に適用することはできません。これにより、両方のオブジェクトが赤く始まり青くなります (2 番目のブラシが紫の色合いで始まるのではなく)。
私は何か簡単なものを見落としていると確信しています...
ありがとう、wTs
一度に 2 つ以上のオブジェクト (TextBlocks) にブラシ (この場合は LinearGradientBrush) を適用したいと思います。私が望む効果は次のようなものです:
編集 両方のオブジェクトに同じブラシを単純に適用することはできません。これにより、両方のオブジェクトが赤く始まり青くなります (2 番目のブラシが紫の色合いで始まるのではなく)。
私は何か簡単なものを見落としていると確信しています...
ありがとう、wTs
私はこのようにしました:
<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>
そのため、背景が青から赤へのグラデーションで塗りつぶされているボーダー。グラデーションの唯一の目に見える部分は、不透明マスク内のテキストです。
たぶん、境界線よりも簡単なコントロールがさらに良いでしょう.
残りの問題は、コンテナー コントロールにはコンテンツがないため、コンテナー コントロールのサイズを明示的に設定する必要があることです。
3 つの整数、ブラシの開始 x 位置、ブラシの現在の x 位置、およびブラシの終了 x 位置に基づいて必要なブラシを返すメソッドを公開する ObjectDataProvider を使用するのはどうですか (ユースケースを見ることができます)。ここで、x start、x end、x current start、x current end の 4 つのパラメーターが必要な場合がありますが、要求した場合には 3 つのパラメーターが機能します)。コントロールのレイアウトに基づいてこれらの整数を静的に割り当てるか、パラメーターにデータバインディングを使用できます。
ObjectDataProvider と、このクラスのメソッド パラメーターへのバインドに慣れていない場合は、こちらとこちらを参照することをお勧めします。
ブラシをウィンドウ (またはアプリケーション) リソースに宣言し、2 つのテキスト ブロックの Foreground プロパティをブラシにバインドします。