gpt4 book ai didi

silverlight - 如何更改按钮的背景颜色

转载 作者:行者123 更新时间:2023-12-01 11:10:30 24 4
gpt4 key购买 nike

无论我将按钮中的 Background 属性更改为什么,它都几乎没有变化,如果我想要一个完全不同颜色的按钮,我应该怎么做?

我知道我可以通过编辑按钮模板来做到这一点,但这似乎有点过分了。

最佳答案

这看起来像是 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 覆盖中修改模板。下面是一个示例,它降低了常用 Button 的不透明度,以便背景显示出来:

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;
}
}
}

关于silverlight - 如何更改按钮的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com