powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: включить в словарь всю папку
6 сообщений из 6, страница 1 из 1
WPF: включить в словарь всю папку
    #39693520
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надоело каждый раз, когда я добавляю новый xaml-файл с шаблонами, добавлять его ресурсы в App.xaml
Можно ли как-то задать, чтобы вся папка туда грузилась?
...
Рейтинг: 0 / 0
WPF: включить в словарь всю папку
    #39693536
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем засорять global scope ресурсами на все случаи жизни? Я обычно прописываю ссылки на RD только там, где этот RD используется, по возможности максимально ближе по логическому дереву к точке использования - так ресурсы ищутся быстрее.
...
Рейтинг: 0 / 0
WPF: включить в словарь всю папку
    #39693558
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныА зачем засорять global scope ресурсами на все случаи жизни?Ну это не отменяет вопроса. Пусть не xaml, но другой словарь, хочется туда всю папку забабахать автоматом.
Сон Веры ПавловныЯ обычно прописываю ссылки на RD только там, где этот RD используется, по возможности максимально ближе по логическому дереву к точке использования - так ресурсы ищутся быстрее.Ну я использую автоматический поиск шаблона, в том числе для элементов ItemsControl и TreeView. А почему он будет долго искать? Полюбому это же словарь с хэшсетом в качестве ключа, так что, мне кажется, время не принципиально.
...
Рейтинг: 0 / 0
WPF: включить в словарь всю папку
    #39693565
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА почему он будет долго искать? Полюбому это же словарь с хэшсетом в качестве ключа, так что, мне кажется, время не принципиально.
Не долго, но дольше, т.к. ресурсы ищутся итеративно вверх по логическому дереву от того элемента, который запрашивает ресурс ( https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/xaml-resources - см. подразделы "Static resource lookup behavior" и "Dynamic resource lookup behavior"). Только если проход вверх всего дерева до корня не дал результатов, выполняется поиск в ресурсах приложения. Соответственно, чем глубже дерево, тем больше время, за которое процесс поиска доберется до App.xaml.
...
Рейтинг: 0 / 0
WPF: включить в словарь всю папку
    #39693705
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно вот так:
Но я бы не стал так извращаться, лучше уж забить ручками, не так уж это и долго
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string location = "resources/";
            var assembly = Assembly.GetExecutingAssembly();
            string[] resourcesNames = assembly.GetManifestResourceNames();
            foreach (string name in resourcesNames)
            {
                ManifestResourceInfo info = assembly.GetManifestResourceInfo(name);
                if (info.ResourceLocation != ResourceLocation.ContainedInAnotherAssembly)
                {
                    Stream resourceStream = assembly.GetManifestResourceStream(name);
                    using (var reader = new ResourceReader(resourceStream))
                    {
                        foreach (DictionaryEntry entry in reader)
                        {
                            var entryKey = entry.Key.ToString();
                            if (entryKey.StartsWith(location)
                                && entryKey.EndsWith(".baml")
                                && entry.Value is Stream stream)
                            {
                                using (var bamlReader = new Baml2006Reader(stream))
                                using (var writer = new XamlObjectWriter(bamlReader.SchemaContext))
                                {
                                    while (bamlReader.Read())
                                    {
                                        writer.WriteNode(bamlReader);
                                    }
                                    if (writer.Result is ResourceDictionary rd)
                                    {
                                        Application
                                            .Current
                                            .Resources
                                            .MergedDictionaries
                                            .Add(rd);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
...
Рейтинг: 0 / 0
WPF: включить в словарь всю папку
    #39693708
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо )
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: включить в словарь всю папку
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]