Это вопрос наследования стоимости, как указывает HB.Наследование значений свойств обычно следует логическому дереву.
В первом случае:
<Button x:Name="Button1">
<TextBlock>inside textblock</TextBlock>
</Button>
Логическим родителем TextBlock является Button, поэтому он наследует свое значение от Button и так далее дологическое деревоТаким образом, в следующем коде TextBlock будет красным:
<Button x:Name="Button1" TextBlock.Foreground="Red">
<TextBlock>inside textblock</TextBlock>
</Button>
Во втором случае:
<Button x:Name="Button2">
no textblock
</Button>
В конечном итоге TextBlock создается ContentPresenter (см. Метод ContentPresenter.ChooseTemplate.в ILSpy / Reflector).В этом случае логическим родителем TextBlock является ContentPresenter.Таким образом, он унаследует свое значение от ContentPresenter и т. Д. Вверх по логическому дереву до Границы, для которой определен белый передний план.
Это кратко задокументировано здесь .