Я немного поиграл с кистями в моем VisualTree-Analyzer, чтобы посмотреть, как работает автоматическое замораживание. Вот результат моих тестов:
Все кисти, которые были прикреплены через ControlTemplates, DataTemplates или Styles, были заморожены, независимо от того, было ли заморожено объявление кисти в шаблоне или в стиле.
Для этого я проверил получившееся визуальное дерево следующих шаблонов и стилей:
<DataTemplate x:Key="Test_DataTemplate">
<Grid>
<!-- Explicit creation to ensure Brush is !IsFrozen through the converter-->
<Grid.Background>
<SolidColorBrush Color="Red"/>
</Grid.Background>
<TextBlock Text="{Binding}"/>
</Grid>
</DataTemplate>
<ControlTemplate x:Key="Test_ControlTemplate" TargetType="{x:Type ContentControl}">
<Border >
<Border.Background>
<SolidColorBrush Color="Green" />
</Border.Background>
<ContentPresenter />
</Border>
</ControlTemplate/>
<Style x:Key="Test_Style" TargetType="TextBlock">
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="Yellow" />
</Setter.Value>
</Setter>
</Style>
<TextBlock >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Background" >
<Setter.Value>
<SolidColorBrush Color="Violet" />
</Setter.Value>
</Setter>
</Style>
</TextBlock.Style>
</TextBlock>
Как уже отмечалось, кисти в визуальном дереве всегда были заморожены.
Кроме того, кисть сеттера в стиле теста стиля была заморожена, если стиль использовался хотя бы один раз. Я думаю, что это «одноразовое ограничение», потому что WPF должен проверить, не затрагивает ли кисть анимацию, и делает это в момент первого использования. Но это только умозрительно. Я не делал никаких тестов с анимацией.
Исходя из замечаний старейшин к этой теме, я думаю, что на мой первоначальный вопрос можно ответить «да». Такое поведение кажется мне также логичным. Но ясно, что так мало тестов с одним типом ресурса также могут привести в совершенно неверном направлении. К сожалению, информации по этой теме не так много. Если у кого-то есть хорошие ссылки или я допустил явную ошибку в своих простых тестах, оставьте мне комментарий.