znalazłem przyczynę tego zachowania - jest to zgodne z projektem:
Jeżeli zawartość ContentControl jest już WPF Element jest utworzony przed użyciem go w ContenPresenter. Logiczny dominująca elementu jest zatem ContentControl. Mogę to sprawdzić poprzez zmianę ContentControl-znaczników do:
<ContentControl Template="{StaticResource Test}" TextBlock.FontSize="50">
<TextBlock>
This text now is shown with a size of 50
</TextBlock>
</ContentControl>
w tym przypadku wielkość tekstu jest 50 to pożądane. Mogę udowodnić tę argumentację również za pomocą wpf-wizualizatora visual studio. Element nadrzędny to ContentControl, a poprzez dziedziczenie dp, rozmiar czcionki jest pobierany z elementu nadrzędnego (ContentControl), a tekst jest wyświetlany w rozmiarze 50!
Innym zachowanie można zaobserwować jeśli ContentControl zawiera tylko tekst jako treści:
<Window.Resources>
<ControlTemplate x:Key="Test" TargetType="{x:Type ContentControl}">
<ContentPresenter TextBlock.FontSize="50"/>
</ControlTemplate>
</Window.Resources>
<Grid>
<ContentControl Template="{StaticResource Test}">
This text is shown with a size of 50
</ContentControl>
</Grid>
W tym scenariuszu TextBox jest stworzony przez ContentPresenter ponieważ tekst nie może być wprowadzona w wizualnym drzewo. Pole tekstowe nie ma elementu nadrzędnego, ale właściwość TemplateParent prowadzi do obiektu ContentPresenter jako obiekt macierzysty TextBoxes, a system DP pobiera wartość FontSize przez dołączone dziedziczenie właściwości zależności od obiektu ContentPresenter. Dlatego w tym scenariuszu rozmiar czcionki został zmieniony na 50.
Różne scenariusze opisano na here.
Czego nie rozumiem, to dlaczego VS2010 pokazuje FontSize 50 przed kompilacją.
Nigdy wcześniej nie miała takiej sytuacji, ale mogła być zaprojektowana. Sądzę, że ContentPresenter po prostu zamienia się na treści, które do niego dodajesz. – decyclone