Вы установили этот шаблон на кнопку?Вы должны установить его, потому что вы дали своему ControlTemplate
имя, что делает его явным.Без имени оно будет неявным, поэтому оно будет использоваться автоматически.
, поэтому
<Button Template="{StaticResource ButtonControlTemplate1}"/>
В вашем примере есть еще пара моментов, на которые я хотел бы обратить внимание.Вы устанавливаете в своей кнопке Content
на экземпляр вашего класса ToolButton
, что хорошо.Этот класс, очевидно, не является элементом управления пользовательского интерфейса WPF, поэтому вы должны указать WPF, что с ним делать.Для этого DataTemplate
, вы определяете DataTemplate для своего класса ToolButton, и теперь WPF знает, как его отобразить.
К сожалению, в кнопке Button Template
есть еще одна проблема.Кнопка имеет тип ContentControl
, что позволяет показывать любой контент.Вы уже использовали свойство Content
.Но вы полностью переопределяете ControlTemplate, помните, что ControlTemplate определяет, как будет выглядеть элемент управления, без его шаблона он абсолютно ничего не показывает.Теперь, глядя на ваш шаблон, я пропускаю специализированный элемент управления ContentPresenter
, который говорит шаблону «Когда у кнопки есть контент, поместите его здесь», поэтому ContentPresenter является заполнителем для фактического набора контента.Теперь вспомните, что я сказал о DataTemplate
, и вы увидите, как эти вещи работают вместе.
Еще одна крошечная вещь: вы используете привязки в своем шаблоне, но вы никогда не устанавливаете DataContext, вы просто устанавливаете содержимое,но контент действителен только внутри ContentPresenter или, что лучше, в вашем DataTemplate.Есть несколько «правил» вокруг DataContext.Краткое резюме: DataContext может быть унаследован и автоматически устанавливается в DataTemplate
.
. Надеюсь, это поможет вам abit.веселит.