WPF微信聊天和通讯录按钮样式代码分享

 更新时间:2016年10月26日 11:49:40   作者:眾尋  
这篇文章主要为大家分享了WPF微信聊天和通讯录按钮样式代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、先用Path画一下轮廓

<Path Stroke="Red" StrokeThickness="1" Margin="10" StrokeDashCap="Round">
  <Path.Data>
   <GeometryGroup>
    <PathGeometry Figures="M 4,40 A 16,13 0 1 1 10,45 L 3,48 Z" />
   </GeometryGroup>
  </Path.Data>
</Path>
<Path Stroke="Red" StrokeThickness="1" StrokeDashCap="Round" Margin="50">
  <Path.Data>
   <GeometryGroup>
    <PathGeometry Figures="M 12,30 A 6,10 0 1 1 18,30 L 30,40 L 30,45 L 0,45 L 0,40Z" />
    <PathGeometry Figures="M 25,25 L 35,25"/>
    <PathGeometry Figures="M 28,30 L 35,30"/>
    <PathGeometry Figures="M 32,35 L 35,35"/>
   </GeometryGroup>
  </Path.Data>
</Path>

路径图如下

二、将路径应用的样式里

 <!--聊天按钮的样式-->
 <Style x:Key="ChatStyle" TargetType="{x:Type RadioButton}">
  <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
  <Setter Property="Background" Value="Transparent"/>
  <Setter Property="BorderBrush" Value="Transparent"/>
  <Setter Property="BorderThickness" Value="0"/>
  <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
  <Setter Property="HorizontalContentAlignment" Value="Center"/>
  <Setter Property="VerticalContentAlignment" Value="Center"/>
  <Setter Property="Padding" Value="1"/>
  <Setter Property="Template">
   <Setter.Value>
    <ControlTemplate TargetType="{x:Type RadioButton}">
     <Border>
      <Path x:Name="btnPath" StrokeThickness="1" Stroke="Gray" Fill="#FF3E3E40">
       <Path.Data>
        <GeometryGroup>
         <PathGeometry Figures="M 4,40 A 16,13 0 1 1 10,45 L 3,48 Z" />
        </GeometryGroup>
       </Path.Data>
      </Path>
     </Border>
     <ControlTemplate.Triggers>
      <Trigger Property="IsChecked" Value="true">
       <Setter Property="Fill" Value="#FF14D212" TargetName="btnPath"/>
       <Setter Property="Stroke" Value="#FF14D212" TargetName="btnPath"/>
      </Trigger>
      <Trigger Property="IsMouseOver" Value="true">
       <Setter Property="Stroke" Value="White" TargetName="btnPath"/>
      </Trigger>
      <MultiTrigger>
       <MultiTrigger.Conditions>
        <Condition Property="IsChecked" Value="true"/>
        <Condition Property="IsMouseOver" Value="true"/>
       </MultiTrigger.Conditions>
       <MultiTrigger.Setters>
        <Setter Property="Stroke" Value="#FF14D212" TargetName="btnPath"/>
       </MultiTrigger.Setters>
      </MultiTrigger>
     </ControlTemplate.Triggers>
    </ControlTemplate>
   </Setter.Value>
  </Setter>
 </Style>

 <!--通讯录的样式-->
 <Style x:Key="FriendStyle" TargetType="{x:Type RadioButton}">
  <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
  <Setter Property="Background" Value="Transparent"/>
  <Setter Property="BorderBrush" Value="Transparent"/>
  <Setter Property="BorderThickness" Value="0"/>
  <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
  <Setter Property="HorizontalContentAlignment" Value="Center"/>
  <Setter Property="VerticalContentAlignment" Value="Center"/>
  <Setter Property="Padding" Value="1"/>
  <Setter Property="Template">
   <Setter.Value>
    <ControlTemplate TargetType="{x:Type RadioButton}">
     <Border>
      <Path x:Name="btnPath" StrokeThickness="1" Stroke="Gray" Fill="#FF3E3E40">
       <Path.Data>
        <GeometryGroup>
         <PathGeometry Figures="M 12,30 A 6,10 0 1 1 18,30 L 30,40 L 30,45 L 0,45 L 0,40Z" />
         <PathGeometry Figures="M 25,25 L 35,25"/>
         <PathGeometry Figures="M 28,30 L 35,30"/>
         <PathGeometry Figures="M 32,35 L 35,35"/>
        </GeometryGroup>
       </Path.Data>
      </Path>
     </Border>
     <ControlTemplate.Triggers>
      <Trigger Property="IsChecked" Value="true">
       <Setter Property="Fill" Value="#FF14D212" TargetName="btnPath"/>
       <Setter Property="Stroke" Value="#FF14D212" TargetName="btnPath"/>
      </Trigger>
      <Trigger Property="IsMouseOver" Value="true">
       <Setter Property="Stroke" Value="White" TargetName="btnPath"/>
      </Trigger>
      <MultiTrigger>
       <MultiTrigger.Conditions>
        <Condition Property="IsChecked" Value="true"/>
        <Condition Property="IsMouseOver" Value="true"/>
       </MultiTrigger.Conditions>
       <MultiTrigger.Setters>
        <Setter Property="Stroke" Value="#FF14D212" TargetName="btnPath"/>
       </MultiTrigger.Setters>
      </MultiTrigger>
     </ControlTemplate.Triggers>
    </ControlTemplate>
   </Setter.Value>
  </Setter>
 </Style>


看下效果图

注意要点有几个:

1、Path原来必须要有填充,也就是说Fill必须要有值,否则会认为是透明,点击不到。

2、一定要设置MultiTrigger,否则当button被选中的时候,鼠标划过,依然会变白色。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于运算符重载的那些事

    基于运算符重载的那些事

    本篇文章是对关于运算符重载的介绍引用了百科里的一个有趣的解释。需要的朋友参考下
    2013-05-05
  • 浅谈C#中的值类型和引用类型

    浅谈C#中的值类型和引用类型

    在C#中值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。下面我们来简单谈谈C#中的值类型和引用类型
    2016-06-06
  • C#中的静态字段double.Epsilon实例详解

    C#中的静态字段double.Epsilon实例详解

    double.Epsilon 是C#中的一个静态字段,表示 double 数据类型的最小可表示的正数值,这篇文章主要介绍了C#中的静态字段double.Epsilon的相关知识,需要的朋友可以参考下
    2024-01-01
  • C#实现简易计算器小功能

    C#实现简易计算器小功能

    这篇文章主要为大家详细介绍了C#实现简易计算器小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C#使用FtpWebRequest与FtpWebResponse完成FTP操作

    C#使用FtpWebRequest与FtpWebResponse完成FTP操作

    这篇文章介绍了C#使用FtpWebRequest与FtpWebResponse完成FTP操作的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#窗体间常用的几种传值方式及委托与事件详解

    C#窗体间常用的几种传值方式及委托与事件详解

    这篇文章主要给大家介绍了关于C#窗体间常用的几种传值方式及委托与事件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用小程序具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • C#泛型类型知识讲解

    C#泛型类型知识讲解

    这篇文章主要介绍了C#泛型类型知识,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C# WinForm创建Excel文件的实例

    C# WinForm创建Excel文件的实例

    下面小编就为大家带来一篇C# WinForm创建Excel文件的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Graphics.DrawImage绘制的图像变大的原因分析及解决

    Graphics.DrawImage绘制的图像变大的原因分析及解决

    这篇文章主要介绍了Graphics.DrawImage绘制的图像变大的原因分析及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • C#多线程系列之async和await用法详解

    C#多线程系列之async和await用法详解

    本文详细讲解了C#多线程中async和await的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02

最新评论