如何用wpf实现不规则按钮?

mhwer99 2012-05-22 03:49:37
如题,我想用wpf实现不规则按钮,根据png图片的形状来决定按钮的形状,图片以外的区域鼠标点击无效。
请高手帮帮忙!
...全文
657 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
郑杰 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

问题解决了!
谢谢大家!
[/Quote]

怎么解决的也不说一声,像这种自己会了不告诉别人的以后大家伙不要帮他。
qldsrx 2012-05-23
  • 打赏
  • 举报
回复
根本不需要图片,这是我以前找的代码,你自己看看,完全通过xaml来定义按钮形状:
http://files.cnblogs.com/qldsrx/ButtonStyle.rar
全局变量 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 6 楼 的回复:
把图像转成path就可以了。。。

XML code
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlT……

我换一张图片就不行了
Data="M 32.9626,1.52588……
[/Quote]
M 是开始的坐标 C 贝塞尔曲线 的意思 大体意思就是 通过几个点坐标,绘制出一个图形。
事件就看你用哪一种了, WPF事件监控,和直接事件两种。
mhwer99 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
把图像转成path就可以了。。。

XML code
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlT……
[/Quote]
我换一张图片就不行了
Data="M 32.9626,1.52588e-005C 64.8366,-1.05113 86.9761,13.3906 90.2887,40.0549C..."
这一长串数字是什么意思啊?怎么改才能适应不同形状的图片呢?
mhwer99 2012-05-23
  • 打赏
  • 举报
回复
问题解决了!
谢谢大家!
cmis7645 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
引用 6 楼 的回复:
把图像转成path就可以了。。。

XML code
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlT……

我换一张图片就不行了
Data="M 32.9626,1.52588e-……
[/Quote]
按钮就是Grid里面包裹一个Path“形状1”,和ContentPresenter ,ContentPresenter 是显示按钮文字的。形状1用来显示图片也就是按钮的形状,按照你说的,就是要求形状1和你显示的图片形状一样,而你每张图片的形状不可能是一样的,所以形状1需要你自己转换成你图片的形状,DATA就是转换之后的数据。
其实用PNG的做按钮,按钮看上去就是图像的形状,只不过你要就形状外的地方鼠标不可以被触发,所以比较复杂。这是复杂形状的 http://blog.csdn.net/cmis7645/article/details/7592372,你自己研究吧,除了形状之外的地方点击都无效。
mhwer99 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
根本不需要图片,这是我以前找的代码,你自己看看,完全通过xaml来定义按钮形状:
http://files.cnblogs.com/qldsrx/ButtonStyle.rar
[/Quote]
你的这个按钮效果的确很好,但是我想改变按钮的形状怎么改呢?
crackdung 2012-05-22
  • 打赏
  • 举报
回复
http://www.viblend.com/ 應該可以
cmis7645 2012-05-22
  • 打赏
  • 举报
回复
复杂形状的http://blog.csdn.net/cmis7645/article/details/7592372
cmis7645 2012-05-22
  • 打赏
  • 举报
回复
把图像转成path就可以了。。。
		<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="grid" RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
<Path x:Name="形状_1" Data="F1 M 37.9719,53.7023C 38.1659,56.8911 38.7423,60.258 40.0892,62.5621C 41.442,65.0446 43.366,66.1075 46.2597,67.8793L 25.636,98.1879C 16.765,93.4041 10.0179,87.3757 5.58875,79.5789C 0.958984,71.603 -0.776428,63.095 0,53.7024L 37.9719,53.7023 Z M 64.572,38.4599C 61.4838,37.0403 58.0189,35.9774 55.1245,35.9774C 52.2362,35.9775 50.3068,37.0403 47.2245,38.4599L 27.7537,7.62128C 36.4301,2.65863 45.489,6.10352e-005 55.1245,6.10352e-005C 64.7599,6.10352e-005 73.8249,2.65863 82.4958,7.62128L 64.572,38.4599 Z M 55.895,44.6616C 61.1013,44.6616 65.1486,48.3853 65.1486,53.1696C 65.1484,57.9568 61.1013,61.6777 55.895,61.6777C 50.6894,61.6777 46.6421,57.9568 46.6421,53.1697C 46.6421,48.3853 50.6894,44.6616 55.895,44.6616 Z M 111.796,53.7024C 112.567,63.095 110.832,71.603 106.202,79.5789C 101.773,87.3758 95.0253,93.4041 86.1608,98.1879L 65.5311,67.8793C 68.4248,66.1075 70.3542,65.0446 71.7017,62.5622C 73.0486,60.2581 73.631,56.8911 73.8251,53.7025L 111.796,53.7024 Z " Fill="Red" Stretch="Fill" Stroke="#FFFDFF00">
<Path.Effect>
<DropShadowEffect ShadowDepth="0" BlurRadius="12"/>
</Path.Effect>
</Path>
<ContentPresenter x:Name="contentPresenter" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Content=""/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="RenderTransform" TargetName="grid">
<Setter.Value>
<TransformGroup>
<ScaleTransform ScaleX="1.05" ScaleY="1.05"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Fill" TargetName="形状_1">
<Setter.Value>
<RadialGradientBrush>
<GradientStop Color="Maroon" Offset="1"/>
<GradientStop Color="Red" Offset="0"/>
</RadialGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
bigbaldy 2012-05-22
  • 打赏
  • 举报
回复
用blend工具,做起来就非常容易,代码都不用写
mhwer99 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

这不是一两句话能讲完的,网上找实例吧
[/Quote]
这位大侠,有没有现在的实例分享一下啊
test2050 2012-05-22
  • 打赏
  • 举报
回复
这不是一两句话能讲完的,网上找实例吧
mhwer99 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

参考http://dev.21tx.com/2008/11/05/13884.html
[/Quote]
那个空白地方也可以点,不是我想要的
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复

110,533

社区成员

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

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

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