无论我在按钮中更改背景属性为什么颜色,它都几乎没有变化。如果我想要一个完全不同颜色的按钮,该怎么办?
我知道可以通过编辑按钮模板来实现这一点,但这似乎有些过度。
我知道可以通过编辑按钮模板来实现这一点,但这似乎有些过度。
这似乎是 SilverLight 2.0 和默认的 Button 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>
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;
}
}
}
<Button x:Name="button" Background="Gold" Foreground="Red" Content="Hello!" />
时,我得到了一个金色背景和红色文本的按钮。如果你想进一步编辑按钮(例如更改点击时的外观等),那么你仍然需要使用模板和视觉状态管理器。我找到了两个非常好的教程,专门关注Silverlight按钮的视觉方面:http://mattberseth.com/blog/2008/03/creating_a_custom_skin_for_sil.html 和 http://weblogs.asp.net/dwahlin/archive/2008/11/23/using-the-visual-state-manager-in-silverlight-templates.aspx。我曾经遇到过同样的问题,但我找到了解决方法。我没有改变按钮的背景颜色,而是将按钮的边框宽度设置为100,然后设置边框的颜色,例如灰色。
这样你就会得到一个灰色的按钮。我知道这不是最好的方法,但对我来说有效。
以下是代码示例:
Dim btn As New Button
btn.Width = 75
btn.Height = 35
btn.BorderThickness = New Thickness(0, 0, 0, 100)
btn.BorderBrush = New SolidColorBrush(Colors.LightGray)
AddHandler btn.Click, AddressOf btn_Click
AddHandler btn.MouseEnter, AddressOf btn_MouseEnter
AddHandler btn.MouseLeave, AddressOf btn_MouseLeave
LayoutRoot.Children.Add(btn)
Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MessageBox.Show("pressed")
End Sub
Private Sub btn_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs)
DirectCast(sender, Button).BorderBrush = New SolidColorBrush(Colors.Gray)
End Sub
Private Sub btn_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs)
DirectCast(sender, Button).BorderBrush = New SolidColorBrush(Colors.LightGray)
End Sub