See the question and my original answer on StackOverflow

The purpose of UserControl is to help you build reusable UI components that can be added to your toolbox just like a built-in control, starting from nothing. The prefix "User" here kinda means "Not from the WPF team". WPF does not ship any class that derives from UserControl.

A very important aspect of UserControls is you can design them using XAML (so they can be composite), and pack code + XAML together, possibly in a "library" assembly that you can ship without the source.

Now, your examples are quite anemic (no offence :-), they don't do anything so interesting that I would be tempted to make them really reusable. Most of the time, you will build UserControls from usage (or experience), after having realized that you have repeated the same XAML pattern more than once, maybe with a few variation.

For example in this open source project (Github for Visual Studio): https://github.com/github/VisualStudio/tree/master/src/GitHub.UI/Controls, you'll see they have written some custom controls, like EmojiImage (that derives from Image, and has no need for XAML), and one UserControl: HorizontalShadowDivider. Why? Because HorizontalShadowDivider has XAML associated with it and is (probably) used in more than one place.