Применить кисть к двум объектам одновременно - PullRequest
1 голос
/ 13 сентября 2010

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

alt text

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

alt text

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

Спасибо, wTs

Ответы [ 3 ]

4 голосов
/ 13 сентября 2010

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

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

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

Возможно, более простое управление, чем граница, будет еще лучшеalt text

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

1 голос
/ 13 сентября 2010

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

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

0 голосов
/ 13 сентября 2010

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

...