What's the difference between ContentControl and ContentPresenter?

.net, contentcontrol, contentpresenter, wpf

Solution

`ContentControl` is a base class for controls that contain other elements and have a `Content`-property (for example, `Button`).

`ContentPresenter` is used inside control templates to display content.

`ContentControl`, when used directly (it's supposed to be used as a base class), has a control template that uses ContentPresenter to display it's content.

My rules of thumb (not applicable in every case, use your judgment):

- Inside `ControlTemplate` use `ContentPresenter`

- Outside of `ControlTemplate` (including `DataTemplate` and outside templates) try not to use any of them, if you need to, you must prefer `ContentPresenter`

- Subclass `ContentControl` if you are creating a custom "lookless" control that host content and you can't get the same result by changing an existing control's template (that should be extremely rare).

Problem

I'm not sure when I should use `ContentPresenter` instead of `ContentControl` (and vice-versa). At the moment, I'm using `ContentControl` pretty much all the time in my `DataTemplate`s. When would `ContentPresenter` be a better choice? and why?

Original source