Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: включить в словарь всю папку / 6 сообщений из 6, страница 1 из 1
27.08.2018, 08:44
    #39693520
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: включить в словарь всю папку
Надоело каждый раз, когда я добавляю новый xaml-файл с шаблонами, добавлять его ресурсы в App.xaml
Можно ли как-то задать, чтобы вся папка туда грузилась?
...
Рейтинг: 0 / 0
27.08.2018, 09:43
    #39693536
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: включить в словарь всю папку
А зачем засорять global scope ресурсами на все случаи жизни? Я обычно прописываю ссылки на RD только там, где этот RD используется, по возможности максимально ближе по логическому дереву к точке использования - так ресурсы ищутся быстрее.
...
Рейтинг: 0 / 0
27.08.2018, 10:15
    #39693558
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: включить в словарь всю папку
Сон Веры ПавловныА зачем засорять global scope ресурсами на все случаи жизни?Ну это не отменяет вопроса. Пусть не xaml, но другой словарь, хочется туда всю папку забабахать автоматом.
Сон Веры ПавловныЯ обычно прописываю ссылки на RD только там, где этот RD используется, по возможности максимально ближе по логическому дереву к точке использования - так ресурсы ищутся быстрее.Ну я использую автоматический поиск шаблона, в том числе для элементов ItemsControl и TreeView. А почему он будет долго искать? Полюбому это же словарь с хэшсетом в качестве ключа, так что, мне кажется, время не принципиально.
...
Рейтинг: 0 / 0
27.08.2018, 10:32
    #39693565
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: включить в словарь всю папку
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
27.08.2018, 13:51
    #39693705
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: включить в словарь всю папку
примерно вот так:
Но я бы не стал так извращаться, лучше уж забить ручками, не так уж это и долго
Код: 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
27.08.2018, 13:56
    #39693708
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: включить в словарь всю папку
спасибо )
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: включить в словарь всю папку / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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