Это похоже на проблему с SilverLight 2.0 и ContentTemplate по умолчанию для кнопки. Я взглянул на источник:
<ControlTemplate TargetType="controls:Button">
<Grid>
<!-- snipped the 36 lines of VisualStatManager here -->
<Border x:Name="Background" CornerRadius="3" Background="White" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}">
<Grid Background="{TemplateBinding Background}" Margin="1">
<Border Opacity="0" x:Name="BackgroundAnimation" Background="#FF448DCA" />
<Rectangle x:Name="BackgroundGradient" >
<Rectangle.Fill>
<LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1">
<GradientStop Color="#FFFFFFFF" Offset="0" />
<GradientStop Color="#F9FFFFFF" Offset="0.375" />
<GradientStop Color="#E5FFFFFF" Offset="0.625" />
<GradientStop Color="#C6FFFFFF" Offset="1" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Grid>
</Border>
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
<Rectangle x:Name="DisabledVisualElement" RadiusX="3" RadiusY="3" Fill="#FFFFFFFF" Opacity="0" IsHitTestVisible="false" />
<Rectangle x:Name="FocusVisualElement" RadiusX="2" RadiusY="2" Margin="1" Stroke="#FF6DBDD1" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
</Grid>
Проблема в том, что прямоугольник с собственным фоном находится над сеткой, в которой есть заданный фон. (Кроме того, граница жестко запрограммирована для белых). Мы можем исправить это с помощью нашего собственного ContentTemplate, но это означает также добавление всего материала VisualStatManager для получения всех анимаций, которые идут вместе с Button.
Второй метод заключается в создании подкласса Button и изменении шаблона в переопределении OnApplyTemplate. Вот пример, который снижает непрозрачность стоковой кнопки, чтобы фон просвечивал:
public class BKButton : Button {
public override void OnApplyTemplate() {
base.OnApplyTemplate();
Border border = GetTemplateChild("Background") as Border;
Rectangle rect = GetTemplateChild("BackgroundGradient") as Rectangle;
if(border != null) {
border.Background = this.Background;
border.Opacity = .6;
}
if (rect != null) {
LinearGradientBrush lbrush = rect.Fill as LinearGradientBrush;
if (lbrush != null) {
lbrush.Opacity = .6;
}
}
}