代码如下:

  <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长度自适应)的更多相关文章

  1. WPF自定义Window样式(1)

    1. 引言 WPF是制作界面的一大利器.最近在做一个项目,用的就是WPF.既然使用了WPF了,那么理所当然的,需要自定义窗体样式.所使用的代码是在网上查到的,遗憾的是,整理完毕后,再找那篇帖子却怎么也 ...

  2. WPF 自定义ComboBox样式,自定义多选控件

    原文:WPF 自定义ComboBox样式,自定义多选控件 一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样 ...

  3. WPF自定义Window样式(2)

    1. 引言 在上一篇中,介绍了如何建立自定义窗体.接下来,我们需要考虑将该自定义窗体基类放到类库中去,只有放到类库中,我们才能在其他地方去方便的引用该基类. 2. 创建类库 接上一篇的项目,先添加一个 ...

  4. WPF 自定义MenuItem样式

    原文:WPF 自定义MenuItem样式 一.前言 默认的MenuItem样式比较普通,这次自定义MenuItem的样式也只是对MenuItem的颜色风格进行变化.需要其他功能的变化,大家可以根据样式 ...

  5. android中样式和自定义button样式

    1)自定义button样式 一.采用图片方式 首先新建Android XML文件,类型选Drawable,根结点选selector,自定义一个文件名. 随后,开发环境自动在新建的文件里加了select ...

  6. WPF 自定义Button控件及样式

    这次通过最近做的小例子说明一下自定义Button控件和样式. 实现的效果为:

  7. WPF自定义TabControl样式

    WPF自定义TabControl,TabControl美化 XAML代码: <TabControl x:Class="SunCreate.Common.Controls.TabCont ...

  8. WPF 自定义滚动条样式

    先看一下效果: 先分析一下滚动条有哪儿几部分组成: 滚动条总共有五部分组成: 两端的箭头按钮,实际类型为RepeatButton Thumb 两端的空白,实际也是RepeatButton 最后就是Th ...

  9. WPF自定义漂亮的按钮样式

    首先打开 Microsoft Visual Studio 2008 ,新建一个WPF项目,在上面随便放几个按钮: 然后给各个按钮设置不同的背景颜色: 设置好之后就是这样啦: 然后我们就开始在 App. ...

随机推荐

  1. onenote无法更新,提示无法流式传输、无法登陆等问题解答

    onenote无法更新,提示无法流式传输 修改DNS 4.2.2.1 和 4.2.2.2 onenote反复提示登录 升级到IE11

  2. 饿了么 PostgreSQL 优化之旅

    1. 架构演变 在O2O外卖领域,基于位置服务的需求越来越多,这就要求DB能够存储地理位置信息,而在开源数据库中,对空间地理数据支持比较好的要数PG的插件Postgis. 饿了么在使用PG的过程中,由 ...

  3. 介绍 ASP.NET Identity - ASP.NET 应用程序的成员身份认证系统

    ASP.NET Identity 是构建 ASP.NET web 应用程序的一种新的身份认证系统.ASP.NET Identity 可以让您的应用程序拥有登录功能,并可以轻松地自定义登录用户的相关数据 ...

  4. Android实现表单提交,webapi接收

    1.服务端采用的是.net的WEBAPI接口. 2.android多文件上传. 以下为核心代码: package com.example.my.androidupload; import androi ...

  5. django drf django-filter的method过滤

    1.View Demo from django.shortcuts import render from rest_framework.views import APIView from rest_f ...

  6. [JS&Jquery]实现页面表格中相同内容的行或列合并

    详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak<script type=&qu ...

  7. ansible 之条件语句 when

    注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...

  8. 音频audio,加层父级

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. CAS客户端整合(二) Zabbix

    Zabbix是一个强大的服务器/交换机监控应用,有zabbix-server, zabbix-client, zabbix-web 三部分.zabbix-web管理端是用php写的. 前文参考:CAS ...

  10. BZOJ 1412--狼和羊的故事(最小割)

    1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3316  Solved: 1664[Submit][St ...