Привязка цветового ресурса? - PullRequest
4 голосов
/ 25 января 2010

У меня странная проблема, которая поставила меня в тупик. Я изменяю шаблон элемента управления WPF Calendar, и по причинам, которые я объясню ниже, я должен использовать ресурс Color, а не ресурс SolidColorBrush, для моего цвета текста. Прямо сейчас мой ресурс Color выглядит так:

<!-- My Colors -->
<Color x:Key="MyTextColor">Blue</Color>

Теперь я хочу привязать ресурс Color к родительскому свойству, но объект Color не имеет свойства Binding. Итак, как мне связать этот ресурс? Спасибо за вашу помощь.


Примечание о том, почему я должен использовать ресурс Color: Элемент управления WPF Calendar анимирует свой текст для наведения мыши в нескольких местах, и каждая анимация использует имя SolidColorBrush , Я не могу заменить кисти ссылкой на ресурс, так как хочу сохранить анимацию, а значит, мне нужно сохранить имя. Но я могу заменить цвета кисти, как я делал в этой кисти с именем TextColor :

<!-- Modification: Changed template brush color -->
<SolidColorBrush x:Name="TextColor">
    <SolidColorBrush.Color>
        <StaticResource ResourceKey="MyTextColor" />
    </SolidColorBrush.Color>
</SolidColorBrush>

Ответы [ 2 ]

5 голосов
/ 26 января 2010

Я выбрал правильный ответ Смуры, потому что он отвечает на вопрос, который я задал. Тем не менее, я думаю, что, возможно, задал неправильный вопрос, и в этом заключается лучшее решение проблемы.

Я решил, что не в курсе использования ресурса, а затем попытался связать этот ресурс. Гораздо лучший подход - просто связать свойство Color напрямую. Для этого я создал простой IValueConverter с именем BrushToColorConverter, а затем использовал его, чтобы связать цвет именованной кисти со свойством Foreground создаваемого мной UserControl. Разметка выглядит так:

<!-- Modification: Changed template brush color -->
<SolidColorBrush x:Name="TextColor" Color="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource BrushToColorConverter}}" />

Этот подход полностью исключает ресурс Color, который я использовал ранее. Это проще и, я подозреваю, более эффективно.

0 голосов
/ 25 января 2010

У нас была та же проблема в нашем программном обеспечении, и мы нашли это решение.По сути, вы создаете класс, который реализует расширение статического класса ресурсов WPF, который обрабатывает связывание, а затем использует его в своем коде XAML.Довольно прост в использовании.

...