Я заставил вашу анимацию работать, заменив <ContentPresenter>
в вашем шаблоне на
<ContentControl x:Name="nestedContentControl" ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
и затем установив Storyboard.TargetName
вашей анимации MouseOver на nestedContentControl
.
.Кажется, проблема заключается в предоставлении значения для Storyboard.TargetName
.Хотя вы можете получить доступ к имени элемента управления, к которому применяется шаблон (то есть к кнопке, использующей этот шаблон), раскадровка не может получить доступ к шаблонному элементу управления.Поэтому вместо этого мы вкладываем в шаблон другой ContentControl (Button сам по себе является ContentControl) и используем его.
Однако использование другого ContentControl имеет свои недостатки.Мне пришлось добавить свойство Foreground="{TemplateBinding Foreground}"
, чтобы он мог подобрать цвет переднего плана, который вы использовали.Вполне возможно, что вам может понадобиться добавить дополнительные «сквозные» привязки в зависимости от того, какие другие свойства вам нужно использовать.
Имейте в виду, что на вашем Focused
VisualState также есть анимация.Эта анимация не будет работать так, как она есть, потому что вы не указали TargetName для нее.Я не знаю, что предложить для этого, потому что я не уверен, что вы пытаетесь достичь.
Наконец, отвечая на этот вопрос, я также нашел аналогичный вопрос оанимация свойства объекта шаблонного родителя.В этом случае решение, по-видимому, состоит в том, чтобы подключить анимацию в коде позади.