Как определяется порядок ключей ResourceDictionary? - PullRequest
3 голосов
/ 26 июля 2011

У меня есть следующее ResourceDictionary (сокращено):

<ResourceDictionary>
  <Fluent:RibbonContextualTabGroup Header="Dokument" x:Key="dokumentRibbonGroup" x:Name="dokumentRibbonGroup" />
  <Fluent:RibbonTabItem x:Key="dokumentRibbonTab" Header="Start" />
  <Fluent:RibbonTabItem x:Key="ueberpruefenRibbonTab" Header="Überprüfen" />
  <Fluent:RibbonTabItem x:Key="austauschRibbonTab" Header="Austausch" />
</ResourceDictionary>

Когда я получаю доступ к свойству Keys словаря, ключи располагаются в следующем порядке:

dokumentRibbonTab
austauschRibbonTab
ueberpruefenRibbonTab
dokumentRibbonGroup

Я не могу понять смысл этого приказа. Это не в алфавитном порядке, не в revsese и, в частности, не в оригинальном порядке. У кого-нибудь есть подсказка? Или даже лучше, предложение о том, как указать порядок элементов в ResourceDictionary?

1 Ответ

5 голосов
/ 26 июля 2011

Это может быть как-то основано на хеш-коде. (Не обязательно просто «в порядке возрастания хэш-кода».) В частности, состояние документа:

Класс ResourceDictionary не является производным от DictionaryBase. Вместо этого класс ResourceDictionary реализует IDictionary, но опирается на Hashtable внутри.

Учитывая, что он использует хеш-таблицу, вполне вероятно, что порядок зависит от хеш-функции.

Как правило, словари не упорядочены, или, скорее, заказ - это деталь реализации, на которую нельзя полагаться.

Учитывая, что я не вижу никакой документации, определяющей порядок, я думаю, вы должны рассматривать как неупорядоченную. Если вы хотите представить ключи в определенном порядке, вы должны сделать это самостоятельно.

...