WPF自定义Button样式(按钮长度随Content长度自适应)
代码如下:
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<!--StackPanel是用来控制当Button长度变化时,位置的适应-->
<StackPanel x:Name="spPanel" Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" >
<Grid>
<Grid.Background>
<ImageBrush Stretch="Fill" ImageSource="btn-n.png"/>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border x:Name="logoImg" Width="60" Height="51">
<Border.Background>
<ImageBrush Stretch="None" ImageSource="btn-icon-up.png"/>
</Border.Background>
</Border>
<!--Viewbox是控制当文字的长度超出最长限制时,对文字进行缩小处理-->
<Viewbox Grid.Column="1" MaxWidth="350">
<Label x:Name="lblContent" Padding="0,0,5,0" VerticalContentAlignment="Center" Content="{TemplateBinding Content}"/>
</Viewbox>
</Grid>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
效果如下图:

当内容变长时:

使用到的知识:
1. StackPanel:用来控制Button的位置,可以设置居中,或左右对齐;
2. Viewbox:用来实现内容超长时,将文字缩小
**精简过并加上触发器的代码:
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<!--StackPanel是用来控制当Button长度变化时,位置的适应-->
<StackPanel x:Name="spPanel" Orientation="Horizontal" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" >
<StackPanel.Background>
<ImageBrush Stretch="Fill" ImageSource="btn-n.png"/>
</StackPanel.Background>
<Border x:Name="logoImg" Width="53" Height="43" Margin="5,0,0,0">
<Border.Background>
<ImageBrush Stretch="UniformToFill" ImageSource="btn-icon-up.png"/>
</Border.Background>
</Border>
<!--Viewbox是控制当文字的长度超出最长限制时,对文字进行缩小处理-->
<Viewbox Grid.Column="1" MaxWidth="350" Margin="5,0">
<Label x:Name="lblContent" VerticalContentAlignment="Center" Content="{TemplateBinding Content}"/>
</Viewbox>
<!--</Grid>-->
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="spPanel" Property="Background">
<Setter.Value>
<ImageBrush Stretch="Fill" ImageSource="btn-h.png"/>
</Setter.Value>
</Setter>
<Setter TargetName="logoImg" Property="Background">
<Setter.Value>
<ImageBrush Stretch="UniformToFill" ImageSource="btn-icon-right.png"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
WPF自定义Button样式(按钮长度随Content长度自适应)的更多相关文章
- WPF自定义Window样式(1)
1. 引言 WPF是制作界面的一大利器.最近在做一个项目,用的就是WPF.既然使用了WPF了,那么理所当然的,需要自定义窗体样式.所使用的代码是在网上查到的,遗憾的是,整理完毕后,再找那篇帖子却怎么也 ...
- WPF 自定义ComboBox样式,自定义多选控件
原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...
- WPF自定义Window样式(2)
1. 引言 在上一篇中,介绍了如何建立自定义窗体.接下来,我们需要考虑将该自定义窗体基类放到类库中去,只有放到类库中,我们才能在其他地方去方便的引用该基类. 2. 创建类库 接上一篇的项目,先添加一个 ...
- WPF 自定义MenuItem样式
原文:WPF 自定义MenuItem样式 一.前言 默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化.需要其他功能的变化,大家可以根据样式 ...
- android中样式和自定义button样式
1)自定义button样式 一.采用图片方式 首先新建Android XML文件,类型选Drawable,根结点选selector,自定义一个文件名. 随后,开发环境自动在新建的文件里加了select ...
- WPF 自定义Button控件及样式
这次通过最近做的小例子说明一下自定义Button控件和样式. 实现的效果为:
- WPF自定义TabControl样式
WPF自定义TabControl,TabControl美化 XAML代码: <TabControl x:Class="SunCreate.Common.Controls.TabCont ...
- WPF 自定义滚动条样式
先看一下效果: 先分析一下滚动条有哪儿几部分组成: 滚动条总共有五部分组成: 两端的箭头按钮,实际类型为RepeatButton Thumb 两端的空白,实际也是RepeatButton 最后就是Th ...
- WPF自定义漂亮的按钮样式
首先打开 Microsoft Visual Studio 2008 ,新建一个WPF项目,在上面随便放几个按钮: 然后给各个按钮设置不同的背景颜色: 设置好之后就是这样啦: 然后我们就开始在 App. ...
随机推荐
- 博客和Github简单练习
我的第一篇博客 1.首先是自我介绍 姓名:孙弘毅 班级:网工142 学号:1413042050 兴趣:游戏,看书 至于我写了多少代码我也不清楚,反正不多 2.Github 注册流程 (1)百度Git ...
- cocos2dx常见场景切换动画(转)
本文转载自:http://www.cnblogs.com/linux-ios/archive/2013/04/09/3010779.html bool HelloWorld::init() { /// ...
- solr特点三: 基于Solr实现排序定制化参考
排序实现有N种形式,最低成本.最快响应时间是目标 一份索引,支持N种排序策略并且在线互不干扰是要考虑的每一种实现,处理的场景是不同的,不要千篇一律 020排序,从索引到效果,有不少坑,这篇文章没有细说 ...
- iOS 内嵌 View 的响应
遇到一个问题就是我有一个 UITextField,点击后不能编辑而是会显示一个自定义的 dialog. 但发现问题是,UITextField 的对点击事件的反应非常吃顿,有时候好使有时候不好使. 后来 ...
- java中继承的关系
当有父子关系的两个类(继承关系),当子类实例化对象的时候 会默认调用父类的无参构造方法,如果有 super()的话,调用的是父类有参的构造方法! 也就是说 父类必须有 有参构造 没有的话super ...
- HTTP请求报文支持的各种方法
常见的HTTP方法如下: 1.GET GET是最常用的方法.通常用于请求服务器发送某个资源. 2.HEAD HEAD与GET的行为类似,但服务器在响应中只返回首部,不会返回实体的部分.这就允许客户端在 ...
- javascript获取网址参数
通过以上图片,就可以很好的理解: location.href location.protocol location.host location.hostname location.port locat ...
- C#控制台输出退格实现变换闪烁的字符效果
C#控制台输出退格实现变换闪烁的字符效果,传统的Console.Clear()方法能清除控制台上的所有内容. 如果用 Console.Write('\u0008');可以实现输出退格,这样就可以方便地 ...
- 【vim】插入模式与常用编辑操作
vim不像很多编辑器那样一启动便可以直接编辑文本,需要在普通模式按下i, a等键才会进入插入模式进行文本编辑. 如何进入插入模式 以下的命令都会让vim从普通模式切换到插入模式,但命令执行后的字符插入 ...
- 对于一些seo查询网站的整理
个人在查找网站seo问题时所使用的一些网站整理以及一些注意事项(同时感谢在处理问题过程中给予帮助的小伙伴们): 1.seo综合查询 (爱站网/站长工具)这俩工具的计算规则不相同所以计算结果出来也 ...