Что именно является «статическим» в статическом ресурсе XAML? - PullRequest
0 голосов
/ 20 июля 2010

В каком смысле ресурсы XAML статичны?

Под ресурсами XAML я имею в виду вещи, объявленные в блоке ресурсов и доступные с помощью синтаксиса {StaticResource resource-name }.

ведут ли себя ресурсы страницы, как будто они являются статическими членами в классе страницы?Или я должен был создать несколько экземпляров класса страницы, получу ли я несколько экземпляров его ресурсов?

Номенклатура подразумевает, что ресурсы будут обрабатываться как статические члены, что подразумевает, что несколько экземпляров страницы будут совместно использовать общий набор ресурсов.

Какое поведение будет проявляться?


Обратите внимание, что фактический ответ содержится в комментариях к принятому ответу.Важная часть эта ссылка .

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Копия словаря ресурсов создается с каждым объектом WPF, который ее определяет. Определение статики из языка программирования здесь просто не применимо.

Вот пример:

Application
 |-ResourceDictionary
   |-Brush1
   |-Brush2
 |-CustomerWindow          x3
   |-ResourceDictionary   
     |-Brush3
     |-Brush4
   |-CustomerListControl   x2
     |-ResourceDictionary 
       |-Brush5
       |-Brush6

В этом примере приложения у нас есть две кисти, определенные в ресурсе приложения, две кисти в CustomerWindow и еще две в CustomerListControl. CustomerWindow имеет два экземпляра CustomerListControl и три открытых окна.

Всего будут созданы следующие ресурсы:

Кисть1 - 1x (одно приложение)
Brush2 - 1x
Brush3 - 3x (три открытых окна)
Brush4 - 3x
Brush5 - 6x (три окна * два элемента управления на окно)
Brush6 - 6x

Если вас беспокоит использование ресурсов, вам следует определить ресурс на самом верхнем уровне. Таким образом, в этом сценарии, если все кисти определены на уровне приложения, будет только один экземпляр каждого независимо от того, сколько окон открыто.

Статья MSDN об оптимизации производительности WPF стоит прочитать.

1 голос
/ 20 июля 2010

Он не имеет ничего общего со статическими типами в c #.

Использование StaticResource оценит ресурс один раз, при первом доступе, т.е. не во время компиляции.

DynamicResource будетоценивать каждый раз, когда требуется ресурс.

Также обратите внимание, что компилятор вообще не оценивает ресурсы, динамические или статические.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...