Полагаю, вы тем временем нашли решение своей проблемы.
Однако, для случая, кто-то еще сталкивается с той же проблемой, что и вы:
Вероятно, единственное объяснение того, почему пользовательский элемент управления не отображается, хотя все шаги по его созданию были выполнены правильно, как и вы, - это отсутствующая запись в AssemblyInfo.cs.
Этот файл должен содержать следующую запись:
[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly))]
Без этой записи файл generic.xaml игнорируется, и поэтому шаблон элемента управления по умолчанию не найден, поэтому элемент управления вообще не получит шаблон элемента управления и, следовательно, не будет отображаться. Это также объясняет, почему ваш элемент управления неожиданно появился, когда вы отключили его статический конструктор. Линия:
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomButton), new FrameworkPropertyMetadata(typeof(CustomButton)));
говорит элементу управления использовать свой собственный стиль по умолчанию вместо того, чтобы наследовать его от своего базового класса. Таким образом, без этой строки CustomButton просто повторно использует шаблон элемента управления по умолчанию класса Button, в результате чего ничто из того, что вы записываете в generic.xaml, не будет иметь никакого эффекта для CustomButton.