WPF如何在style中添加trigger?改变圆形按钮的背景色

icyfox_bupt 2012-05-06 11:00:30
大家请看我的代码 我做了一个圆形按钮,有渐变效果
现在的效果是一个红色按钮,上面的文字在鼠标移动到的时候会变成红色
这个很好做,因为只要改Foreground就可以了
现在我想改变圆形按钮的Fill Stroke等等特性,请问应该怎么做?
我自己试着的是 不能直接写Fill 写Ellipse.Fill也不对
不知道这个trigger应该写在什么位置?
希望高人给予解答~




<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button" x:Key="foxbutton">
<Setter Property="Background" Value="Green"/>
</Style>
<Style x:Key="EllipseButton" TargetType="{x:Type Button}">
<Setter Property="Height" Value="100"/>
<Setter Property="Width" Value="100"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Ellipse>
<Ellipse.Effect>
<BlurEffect Radius="23"/>
</Ellipse.Effect>
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="#FFEB1C1C" Offset="0"/>
<GradientStop Color="#B2DA3361" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
<Ellipse.Stroke>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#FFC6EF18" Offset="0"/>
<GradientStop Color="#FFDA1F97" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Stroke>
</Ellipse>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
...全文
1124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
icyfox_bupt 2012-05-09
  • 打赏
  • 举报
回复
谢谢您,确实是这样@

[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:
引用 6 楼 的回复:

<Setter TargetName="" />
笔误了


谢谢大神的指导,可是还是不太对 。。。。。
麻烦您再看看。

无法在 Style Setter 上设置 TargetName 属性。 行 37 位置 25.


Style的Trigger是没法设置TargetName的,只有ControlTemplate ……
[/Quote]
沝林 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

<Setter TargetName="" />
笔误了


谢谢大神的指导,可是还是不太对 。。。。。
麻烦您再看看。

无法在 Style Setter 上设置 TargetName 属性。 行 37 位置 25.
[/Quote]

Style的Trigger是没法设置TargetName的,只有ControlTemplate 的Tigger可以设置TargetName,并且目标只能是ControlTemplate 范围内的控件;

你应该设置ControlTemplate.Trigger而非Style.Trigger
icyfox_bupt 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

<Setter ElemeentName="xxx" Property="Foreground" Value="Red" />
[/Quote]
这。。
我这里是这样的

错误 1 未在类型“Setter”中找到属性“ElementName”。
nonocast 2012-05-06
  • 打赏
  • 举报
回复
<Setter ElemeentName="xxx" Property="Foreground" Value="Red" />
icyfox_bupt 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

给<Ellipse>一个Name
然后在Trigger中指定ElementName=上面Ellipse的Name即可
[/Quote]
你好 我在上面写成这样:
<Ellipse x:Name="myEllipse">
但是在底下的
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True" >
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
中,没有找到哪个地方可以打elementname这个呀?
没有自动提示出来?。。。
nonocast 2012-05-06
  • 打赏
  • 举报
回复
给<Ellipse>一个Name
然后在Trigger中指定ElementName=上面Ellipse的Name即可
icyfox_bupt 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

<Setter TargetName="" />
笔误了
[/Quote]

谢谢大神的指导,可是还是不太对 。。。。。
麻烦您再看看。

无法在 Style Setter 上设置 TargetName 属性。 行 37 位置 25.
nonocast 2012-05-06
  • 打赏
  • 举报
回复
<Setter TargetName="" />
笔误了

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧