Я просто погружаюсь в WPF и нахожу это немного нечетным и печальным к моему стилю: Почему значением чего-то может быть Ресурс, но Вы не можете установить значение непосредственно к тому, что представляет Ресурс? Пример:
Это допустимо:
<ToggleButton>
<ToggleButton.Resources>
<Image x:Key="cancelImage" Source="cancel.png" />
</ToggleButton.Resources>
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content" Value="{DynamicResource cancelImage}" />
</Style>
</ToggleButton.Style>
</ToggleButton>
Но это не:
<ToggleButton>
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Content">
<Setter.Value>
<Image Source="cancel.png" />
</Setter.Value>
</Setter>
</Style>
</ToggleButton.Style>
</ToggleButton>
Каково различие? Почему оба не работают? Мне не нравится иметь необходимость создать "Ресурс" для некоторых вещей, потому что он делит мой код и может сделать более трудным читать.
И да, я действительно знаю, что мой пример может быть упрощен как это
<ToggleButton>
<Image Source="cancel.png" />
</ToggleButton>
но это не точка.
При работе с сеттерами значение для сеттера должно поддерживать возможность быть "замороженным". Это может быть тип значения (включая структуры и перечисления) или класс, производный от Freezable.
Возможно, это не сильно поможет вашему эстетическому чувству, но часто чище объявлять все ресурсы в верхней части раздела Resources файла (или ResourceDictionary), в отличие от добавления их в Resources отдельного стиля или элемента управления.