En la plantilla de control de un botón, ¿cómo puedo configurar el color del texto contenido?

Usando Silverlight 4 y WPF 4, estoy tratando de crear un estilo de botón que altere el color del texto de cualquier texto contenido cuando se presiona el botón sobre el botón. Como estoy tratando de hacer esto compatible con Silverlight y WPF, estoy usando el administrador 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>

Dado que esta es una plantilla para un botón antiguo normal, sé que no hay garantía de que incluso haya un bloque de texto dentro, y al principio no estaba seguro de que esto fuera posible. Curiosamente, el color del texto.hace cambiar si el botón se declara como:

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

perono cambiar si el botón se declara como:

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

A pesar de que el árbol visual (cuando se inspecciona en snoop) es idéntico (Botón -> ContentPresenter -> TextBlock), con la advertencia de que el bloque de texto creado en la primera versión tiene su contexto de datos establecido en "Hola, Mundo", mientras que el bloque de texto en la segunda versión simplemente tiene su propiedad de texto establecida. Supongo que esto tiene algo que ver con el orden de creación del control (la primera versión que el botón crea TextBlock, en la segunda versión, ¿podría crearse primero el bloque de texto? ¿Realmente no estoy seguro de esto?).

En el curso de la investigación de esto, he visto algunas soluciones que funcionan en Silverlight (como reemplazar el ContentPresenter con un ContentControl), pero eso no funcionará en WPF (el programa realmente falla).

Dado que esto está en la plantilla de control del botón, y me gustaría usar el VSM si es posible, creo que eso también descarta cambiar explícitamente la propiedad de primer plano del botón (no sé cómo accedería a eso desde la plantilla. )

Realmente agradecería cualquier ayuda, consejo que cualquiera pueda dar.

Respuestas a la pregunta(3)

Su respuesta a la pregunta