我正在设计一个具有多个级别的Windows 8应用程序。每个级别都有许多按钮,每个按钮都带有'myStyle'样式。
<Style x:Key="myStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Ellipse StrokeThickness="4" Width="55" Height="55" Stroke="Aquamarine">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="GreenYellow"/>
<GradientStop Color="#FF1E46FB" Offset=".5"/>
<GradientStop Color="GreenYellow" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我要做的是操纵c#中的代码来改变每个级别中所有按钮的笔触颜色。即Level1按钮有红色笔划,Level2按钮有绿色笔划等...目前我默认在Aquamarine设置笔划。
我想知道是否有人可以就如何做到这一点给我任何建议。任何帮助都将非常感激。
答案 0 :(得分:0)
鉴于评论,我认为这应该适合你。在你的模板中,将它用于Ellipse,而不是现在的 - 其他一切都是相同的:
<Ellipse StrokeThickness="4" Width="55" Height="55" Stroke="{TemplateBinding BorderBrush}">
然后,您可以在按钮中将颜色分别指定给按钮,例如:
<Button x:Name="b1" Style="{StaticResource myStyle}" BorderBrush="Red">Level 1 Button</Button>
<Button x:Name="b2" Style="{StaticResource myStyle}" BorderBrush="Green">Level 2 Button</Button>
或者,您可以对Ellipse进行相同的更改,并根据主要样式添加其他样式,例如:
<Style x:Key="Level1" BasedOn="{StaticResource myStyle}" TargetType="Button">
<Setter Property="BorderBrush" Value="Red" />
</Style>
<Style x:Key="Level2" BasedOn="{StaticResource myStyle}" TargetType="Button">
<Setter Property="BorderBrush" Value="Green" />
</Style>
然后你的按钮看起来像:
<Button x:Name="b1" Style="{StaticResource Level1}">Level 1 Button</Button>
<Button x:Name="b2" Style="{StaticResource Level2}">Level 2 Button</Button>
答案 1 :(得分:0)
使用你的建议Jim解决了我的问题。在myStyle中将模板绑定应用到我的椭圆描边:
<Style x:Key="myStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Stroke="{TemplateBinding Foreground}" RenderTransformOrigin="0.5,0.5" StrokeThickness="3" Width="55" Height="55" Margin="2.5">
<Ellipse.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White"/>
<GradientStop Color="White" Offset="1"/>
<GradientStop Color="#FF9FA4A4" Offset="0.5"/>
</LinearGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后在级别加载时使用foreach循环设置所有按钮(挂钩)的前景。
foreach (Control p in Globals.allPegList)
{
p.Foreground = new SolidColorBrush(Globals.color1);
}
感谢您的帮助!
ps:Globals只是一个命名空间,我声明了一些全局变量。 color1是一个Color变量。 allPegList是每个级别中所有按钮(挂钩)的列表。