Q:

Custom Controls not displaying

I'm trying to learn how to design a Wpf .NET Core custom control. I've been following a YouTube video to the letter but when it comes to running the solution, the control isn't showing on the main window. Can anybody see what I'm doing wrong?
MainWindow.xaml
<Window x:Class="AnalogClock.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:AnalogClock"
        xmlns:custom="clr-namespace:AnalogClock.CustomControls"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Label Content="Test"/>
        <StackPanel>
            <custom:AnalogClock/>
        </StackPanel>
    </Grid>
</Window>

/Themes/Generic.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:AnalogClock.Themes">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/CustomControls/AnalogClockStyle.xaml"/>
    </ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

/CustomControls/AnalogClock.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace AnalogClock.CustomControls
{
    class AnalogClock : Control
    {
        static AnalogClock()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(AnalogClock), new FrameworkPropertyMetadata(typeof(AnalogClock)));
        }
    }
}

/CustomControls/AnalogClockStyle.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:AnalogClock.CustomControls">
    <Style TargetType="local:AnalogClock">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:AnalogClock">
                    <Grid>
                        <Line x:Name="PART_HourHand"
                              Stroke="Black"
                              StrokeThickness="2"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"
                              X1="0"
                              X2="-75"/>
                        <Line x:Name="PART_MinuteHand"
                              Stroke="Black"
                              StrokeThickness="2"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"
                              X1="0"
                              X2="-100"/>
                        <Line x:Name="PART_SecondHand"
                              Stroke="Red"
                              StrokeThickness="2"
                              VerticalAlignment="Center"
                              HorizontalAlignment="Center"
                              X1="0"
                              X2="-100"/>
                        <Ellipse x:Name="PART_Border" 
                                 Stroke="Black"
                                 Fill="Black"
                                 StrokeThickness="2" 
                                 Width="210" 
                                 Height="210"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

A:

Add the following attribute to any class file in your project, for example to the file where the AnalogClock class is defined:
[assembly: System.Windows.ThemeInfo(
    System.Windows.ResourceDictionaryLocation.None,
    System.Windows.ResourceDictionaryLocation.SourceAssembly
)]

Unlike .NET Framework projects, .NET Core projects don't include an AssemblyInfo.cs file that contains this attribute by default. It's required for the generic resource dictionary to be found.

