No modelo de controle de um botão, como posso definir a cor do texto contido?

Usando o Silverlight 4 e o WPF 4, estou tentando criar um estilo de botão que altera a cor do texto de qualquer texto contido quando o botão é colocado sobre o mouse. Como estou tentando tornar isso compatível com o Silverlight e o WPF, estou usando o gerenciador de estado visual:

<Style TargetType="{x:Type Button}">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="Button">
            <Border x:Name="outerBorder" CornerRadius="4" BorderThickness="1" BorderBrush="#FF757679">
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="Normal" />
                        <VisualState x:Name="MouseOver">
                            <Storyboard>
                                <ColorAnimation Duration="0" To="#FFFEFEFE"
                                                Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
                                                Storyboard.TargetName="contentPresenter"/> 
                            </Storyboard>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
                <Grid>
                    <Border x:Name="Background" CornerRadius="3" BorderThickness="1" BorderBrush="Transparent">
                        <Grid>
                            <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}"/>
                        </Grid>
                    </Border>
                </Grid>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

Como esse é um modelo para um botão antigo comum, sei que não há garantia de que exista um bloco de texto nele e, a princípio, não tinha certeza se isso era possível. Curiosamente, a cor do textofaz mude se o botão for declarado como:

<Button Content="Hello, World!" />

mas issonão mude se o botão for declarado como:

<Button>
    <TextBlock Text="Hello, World!" /> <!-- Same result with <TextBlock>Hello, World </TextBlock> -->
</Button>

Embora a árvore visual (quando inspecionada no snoop) seja idêntica (Button -> ContentPresenter -> TextBlock), com a ressalva de que o bloco de texto criado na 1ª versão possui seu contexto de dados definido como "Olá, Mundo", enquanto o bloco de texto em a segunda versão apenas possui sua propriedade de texto definida. Presumo que isso tenha algo a ver com a ordem da criação do controle (a primeira versão do botão cria o TextBlock, na segunda versão o bloco de texto pode ser criado primeiro? Realmente não tenho certeza disso).

Durante a pesquisa, vi algumas soluções que funcionam no Silverlight (como substituir o ContentPresenter por um ContentControl), mas que não funcionam no WPF (o programa realmente falha).

Como esse é o modelo de controle do botão, e eu gostaria de usar o VSM, se possível, acho que isso também exclui explicitamente a alteração da propriedade Foreground do próprio botão (não sei como acessar isso de dentro do modelo? )

Eu realmente aprecio qualquer ajuda, conselhos que alguém possa dar.

questionAnswers(3)

yourAnswerToTheQuestion