|
DynamicResource fallback value
|
|||
---|---|---|---|
#18+
Сабж. Если не был найден StaticResource, то мы получаем ошибку, а вот если не был найден DynamicResource, то возможны варианты. Обычно для ссылочных типов конечному потребителю в итоге просто приходит null-значение, которое далее может трактоваться различными способами. В интернетах в основном советуют написать свою реализацию DynamicResourceExtension, либо унаследоваться от него, и добавить свою логику. Как говорится, советовать - не мешки ворочать, даже второй вариант очень трудно реализуем, поскольку ProvideValue у DynamicResource возвращает не непосредственно требуемое значение, а экземпляр ResourceReferenceExpression - это internal-класс, и внутри него тоже всё преимущественно internal. Логично было бы забиндиться на DynamicResource, и к биндингу прикрутить конвертер, но DynamicResource можно забиндить только на DependencyProperty, а свойство Source у Binding таковым не является. В результате я сделал так: Код: xml 1. 2. 3. 4. 5. 6.
(DataContextSpy взят у Джоша Смита отсюда ) Код: xml 1. 2. 3. 4. 5. 6.
Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
(опытным путём выяснено, что если DynamicResource не нашелся, то в конвертер приходит null). Это всё вполне работает, но выглядит, по моему скромному, несколько громоздко. Может, у кого-то есть идеи, как это реализовать более компактно? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2020, 08:20 |
|
|
start [/forum/topic.php?fid=21&tid=1440260]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
41ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
others: | 237ms |
total: | 372ms |
0 / 0 |