Применить кисть к двум объектам одновременно

Я хотел бы применить Brush (LinearGradientBrush в этом случае) к двум или более объектам (TextBlocks) одновременно. Эффект, который я хотел бы, выглядит примерно так:

альтернативный текст

Редактировать Я не могу просто применить одну и ту же кисть к обоим объектам, так как это заставит их обоих начать краснеть и перейти в синий (вместо второго, начинающегося с оттенка фиолетового).

альтернативный текст

Я уверен, что я пропускаю что-то быстрое и легкое...

Спасибо, WTS

3 ответа

Решение

Я сделал это так:

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

Итак, граница, фон которой заполнен градиентом от синего до красного. Единственной видимой частью градиента является текст в маске непрозрачности.

Может быть, какой-то более простой контроль, чем граница, был бы еще лучше.альтернативный текст

Оставшаяся проблема заключается в том, что нужно контролировать размер контейнера явно, так как у него нет содержимого.

Как насчет использования ObjectDataProvider, который предоставляет метод, который возвращает желаемую кисть, основанную на 3 целых числах, начальной позиции x кисти, текущей позиции x кисти и конечной позиции x кисти (я мог видеть варианты использования где вам может потребоваться четыре параметра: x начало, x конец, x текущее начало, x текущее завершение, но параметр 3 будет работать для случая, о котором вы просили). Вы можете либо статически назначить эти целые числа на основе макета вашего элемента управления, либо использовать привязку данных для параметров.

Если вы не знакомы с ObjectDataProvider и привязаны к параметрам метода для этого класса, я предлагаю перейти здесь и здесь

Объявите кисть в ресурсах окна (или приложения) и свяжите свойство Foreground двух текстовых блоков кистью.

Другие вопросы по тегам