WPF按钮矢量图标应用多种字体

6 篇文章 0 订阅

WPF标准按钮是没有图标的,但是它提供了一个简单高效的设计框架帮助开发者快速定制开发各种各样的功能组件

比如一个标准按钮可以写成

<Button>Cilck me!</Button>

 

给按钮增加一个图标

        <Button>
          <StackPanel Orientation="Horizontal">
            <Image Source="/Datas/Images/System.png" Width="30"/>
            <Label>登录</Label>
          </StackPanel>
        </Button>

使用图片作为图标比较占用内存,而且不便于管理,一般我习惯于使用矢量字体

<Button CommandParameter="New" Command="command:CustomCommandsInWebBrowser.Common">
    <TextBlock>
        <Run Foreground="#FF0ADE0A" Text="&#xe0e6;" FontWeight="UltraBold" TextBlock.FontFamily="/Product2;component/Resources/Fonts/#SAP-icons"/>
        <TextBlock>New</TextBlock>
    </TextBlock>
</Button>

有时候一个字体文件不够使用,如果当前的编码值在字体库中没有找到对应的字符,则会出现显示异常

 

这是不能容忍的!

一般的解决方法是构建一个自定义控件类,设计一种替换字符的方法,如果字符编码在当前的字体库中找不到,则将图标改成一个指定的字符,需要在转换类中做一些逻辑处理;

现在我主要介绍一种更简单的解决方式

即可以对一个控件的字体设置多个值,当第一种字体不满足时,显示第二种字体,以此类推

这个问题在网上找了几天都没找到解决方法,我一直都以为FontFamily属性值表示的是一个字体资源的路径,

最终得意与我对html的深入掌握,想到了一种解决方法

我尝试着改用html设置多字体的写法,最后居然成功了,

如以下的Sytle应用到TextBlock后,就可以让其控件同时拥有FontAwesome和SAP-UI5两种矢量字体,当第一种字符找不到就会使用第二种字体

  <Style x:Key="SF2015" TargetType="TextBlock">
    <!--<Setter Property="FontFamily" V/alue="pack://application:,,,/ToolsLibs;component/Datas/#FontAwesome"></Setter>-->
    <Setter Property="FontFamily" Value="pack://application:,,,/ToolsLibs;component/Datas/#FontAwesome,pack://application:,,,/ToolsLibs;component/Datas/#SAP-icons"></Setter>
    <!--<Setter Property="FontFamily" Value="pack://application:,,,/ToolsLibs;component/Datas/#FontAwesome"></Setter>-->
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="TextAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="FontSize" Value="20"/>
    <Setter Property="Margin" Value="3"/>
  </Style>

可以看出xaml继承了html很多设计思想,多多尝试可以提升自己的学习能力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值