Используйте UserControl (или пользовательский элемент управления), где вы хотите инкапсулировать поведение . Под поведением я подразумеваю не просто логику взаимодействия, такую как поле со списком с настроенным поведением двойного щелчка, но модель данных, такую как элемент управления, который отображает сведения о персоне и, следовательно, нуждается в свойстве PersonToDisplay. Ресурсы, специфичные для этого UserControl, помещаются в словарь ресурсов элемента управления.
Используйте ResourceDictionary, где вы хотите поделиться ресурсами . Например, если у вас есть набор кистей, которые вы хотите использовать в нескольких местах (и хотите иметь центральное место для их обновления), это будет кандидатом в ResourceDictionary.
Существуют случаи, которые могут быть реализованы исключительно с помощью ресурсов, но в любом случае вы можете захотеть упаковать их как элемент управления, чтобы их было легче понять в момент использования. Например, если у вас есть кнопка, предназначенная для мигания, когда мышь над ней, вы можете почувствовать, что пользователям легче писать (и читать) <local:AnnoyingButton />
, чем <Button Style="{StaticResource AnnoyingButton}" />
(где стиль находится в AnnoyingButton.xaml
словарь ресурсов), хотя на самом деле все это можно сделать с помощью шаблонов и триггеров, а не с помощью реального кода. Здесь я склонен ошибаться при создании элемента управления, потому что (а) он более устойчив, если я обнаружу, что мне нужно добавить код позже, и (б) это избавит меня от необходимости писать ResourceDictionary.MergedDictionaries
элементов. Это суд призыва.