Проблема в том, что TextBlock на самом деле покрывает больше пространства, чем 'x', потому что шрифты имеют внутреннее заполнение вокруг пикселей, которые образуют букву. Таким образом, мышь на самом деле может быть над TextBlock (а не только на пикселях символа 'x'), и это предотвратит срабатывание вашего другого триггера. Это будет учитывать или / или эффект, который вы испытываете.
Среди других подходов, одна возможность состоит в том, чтобы обернуть оба элемента в шаблон управления ...
<Grid>
<Grid.Resources>
<ControlTemplate x:Key="EllipseWithText" TargetType="{x:Type Button}">
<Grid x:Name="MainGrid">
<Rectangle x:Name="MainRectangle" Fill="#00000000" RadiusX="5" RadiusY="5"/>
<ContentPresenter x:Name="Presenter"
HorizontalAlignment="Center" VerticalAlignment="Center"
TextBlock.Foreground="#BB225588"/>
<Path x:Name="Cross" Data="M0,0 L1,1 M0,1 L1,0"
Stretch="Fill" Stroke="Black"
StrokeThickness="2" Width="8" Height="8" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="MainRectangle" Property="Fill" Value="Red"/>
<Setter TargetName="MainRectangle" Property="Stroke" Value="Transparent"/>
<Setter TargetName="Cross" Property="Stroke" Value="White" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Grid.Resources>
<Button Height="15" Width="15" Template="{StaticResource EllipseWithText}"/>
</Grid>
Это даст желаемый эффект, когда эллипс станет красным, а 'x' - другим цветом. Обратите внимание, что этот шаблон не использует TextBlock, но вместо этого использует путь. Путь имитирует символ «х». Этот подход вызывает меньше столкновения с недвижимостью и дает эффект, который вы ищете.