Вот простая версия:
<ControlTemplate TargetType="CheckBox">
<Image Name="TickImage" Source="HollowTick.png" />
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="TickImage" Property="Source" Value="FilledTick.png" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Это довольно элементарно, потому что не учитывает такие вещи, как поля и отступы, но они, вероятно, сейчас не важны для вас. Ключевым моментом является использование триггера и сеттера для изменения источника изображения, когда IsChecked имеет значение true - вы должны быть в состоянии создать оттуда.