WPF Получить цвет кисти из ресурса кисти

Мне нужно получить цвет от кисти динамически.
Итак, у меня есть кисть:

<SolidColorBrush x:Key="ExampleBrush" Color="Black" />

Итак, можно получить цвет (для другой кисти, например):

<SolidColorBrush x:Key="AnotherBrush" Color="{Binding Source={StaticResource ExampleBrush}, Path=Color}" />

Итак, мой вопрос: как можно получить это для динамических ресурсов?
Просто потому, что если я изменю файл ресурсов с ExampleBrush - цвет AnotherBrush не изменится...

Пожалуйста, не стесняйтесь задавать любые вопросы. Спасибо


person MihailPw    schedule 04.02.2017    source источник


Ответы (1)


Вы не можете установить для свойства Color AnotherBrush значение Color объекта ExampleBrush, используя свойство DynamicResource. Обходным решением было бы использовать DynamicResource для прямой ссылки на ExampleBrush и обойти AnotherBrush:

<TextBlock Text="..." Foreground="{DynamicResource AnotherBrush}" />

Вам действительно не нужна AnotherBrush, так как Foreground из TextBlock все равно будет меняться всякий раз, когда изменяется AnotherBrush. Результаты будут такими же.

Вы также можете «привязаться» к AnotherBrush, но тогда вам нужно будет явно обновлять эту кисть всякий раз, когда обновляется ExampleBrush:

<TextBlock Text="..." Foreground="{DynamicResource AnotherBrush}" />
person mm8    schedule 05.02.2017
comment
Что не работает? Если ваш код не работает, вам нужно опубликовать пример того, что вы пытаетесь сделать, если вы хотите, чтобы кто-то мог вам помочь... конечно, это работает для использования DynamicResource. - person mm8; 05.02.2017
comment
Уверены ли вы? screencast.com/t/33M28GoAvlf (ExampleBrush просто проверьте, что ресурсы были изменены) Пожалуйста, исправьте меня если я ошибаюсь - person MihailPw; 05.02.2017
comment
Пожалуйста, предоставьте полный воспроизводимый образец кода вашей проблемы. Если вы замените AnotherResource другой кистью, TextBlock в моем образце разметки должен обновиться. - person mm8; 05.02.2017
comment
Вы можете скачать тестовый проект с onedrive, это вам подходит? 1drv.ms/u/s!AofHl6mOBGLrhZ50aAQbNcbepaDYFA - person MihailPw; 05.02.2017
comment
Вы должны прочитать мой ответ еще раз. Не используйте AnotherBrush в AnotherBrushBorderStyle, потому что это не сработает. Вместо этого используйте ExampleBrush и избавьтесь от AnotherBrush: ‹Style x:Key=AnotherBrushBorderStyle TargetType={x:Type Border} BasedOn={StaticResource BorderStyle}› ‹Setter Property=Background Value={DynamicResource ExampleBrush} /› ‹/Style› - person mm8; 05.02.2017
comment
Это просто для примера. На самом деле мне нужно получить цвет для создания DropShadowEffect с цветом ExampleBrush. - person MihailPw; 05.02.2017