![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| Compositum |
|
||||||||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Добрый день. Мне нужно написать библиотеку, содержащую в себе GUI, который будет мною использоваться в составе работы одного плагина. При этом я хочу активно использовать стили и шаблоны (весь GUI полностью пишу на XAML). Но есть одна проблема... Как известно, в XAML используемый в приложении ресурс должен быть определён до того, как в XAML-разметке встретится первая ссылка на него. Такие ресурсы я выношу в отдельный xaml-файл (словарь), после чего этот словарь следует подключить к ресурсам некоторого элемента - чаще всего окна или приложения. Предположим, что мне нужно связать моё некоторое окно MainWindow с ресурсом, например залинковать свойство Background окна. Куда мне подключить словарь ресурсов в этом случае? Выходит, что к объекту приложения, т.к. иначе получится что в моей XAML-разметке ссылка на ресурс встретится раньше, чем будет выполнена линковка к ресурсу (хотя XAML-дизайнер при этом отображает верный результат). Продемонстрирую проблему.
Сначала покажу код словаря:
Теперь показываю фрагмент кода окна и то, что вижу в дизайнере: ![]() На скрине видим, что я ссылаюсь на ресурс (строка 5) ранее, чем он определён (строка 10). Однако визуальный дизайнер студии всё показывает корректно. Если нажать F5, то понятное дело - получу ошибку компиляции:
Конечно, я могу вынести ресурс за рамки моего класса MainWindow, определив его в ресурсах класса приложения и тогда XAML-отладчик всё нормально скомпилирует, но проблема в том, что поскольку я пишу GUI для плагина, то мне придётся в коде плагина создавать объект окна, прежде чем его открыть. Т.е. получается, что я программно буду создавать объект окна, в теле которого имеется линк на ресурс, определённый в теле приложения (которого к этому моменту ещё нет). Показываю на примере кода:
Этот код выдаст ошибку в первой же строке, потому как win не имеет нужного ему ресурса, определённого в экземпляре класса App, но ещё к тому моменту не созданного... Как вариант, можно было бы вынести привязку свойства окна после определения ресурсов, прописав её как-то так:
Но это схематичный код, на самом деле я не знаю, как правильно прописать привязку внутри тега <Window.Background>, если такое вообще возможно... Как быть? Это сообщение отредактировал(а) Compositum - 7.5.2010, 18:32 |
||||||||
|
|||||||||
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Вопрос снят, нужно делать так:
Просто меня сбило с толку то, что в процессе набирания " <StaticResource..." дизайнер XAML не выводил мне подсказок, в свете чего я бросал набирать, решив, что такой вариант не верен. |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Можешь использовать DynamicResource.... Он позволяет:
1. сослаться не еще не существующий ресурс 2. отслеживать изменения этого ресурса -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
спасибо Это сообщение отредактировал(а) Compositum - 8.5.2010, 15:10 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |