一个简单的WPF字体选择器实现

很久没有写博客了。这是放暑假中的第一篇博客,以后会多多更新!!!这就是我写的一个字体选择器,界面如下:本程序用到的技术比较简单,仅仅是用了Font类的几个方法和数据绑定而已。首先建一个四行两列

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

很久没有写博客了。

这是放暑假中的第一篇博客,以后会多多更新!!!

这就是我写的一个字体选择器,界面如下:

image

 

本程序用到的技术比较简单,仅仅是用了Font类的几个方法和数据绑定而已。

首先建一个四行两列的Grid,添加一个ComboBox,命名为fonts。然后在添加若干个TextBlock和一个TextBox(用于显示字体名称),如上图所示。

 

以下是完整的xaml:

<Window x:Class="WpfApplication7.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="字体选择器" Height="350" Width="594" Loaded="MainWindow_Loaded_1"> 
    <Grid> 
        <Grid.RowDefinitions> 
            <RowDefinition Height="2*"></RowDefinition> 
            <RowDefinition Height="2*"></RowDefinition> 
            <RowDefinition Height="2*"></RowDefinition> 
            <RowDefinition Height="4*"></RowDefinition> 
        </Grid.RowDefinitions> 
        <Grid.ColumnDefinitions> 
            <ColumnDefinition></ColumnDefinition> 
            <ColumnDefinition></ColumnDefinition> 
        </Grid.ColumnDefinitions> 
        <ComboBox HorizontalAlignment="Center" MinWidth="200" Name="fonts" SelectionChanged="fonts_SelectionChanged" Grid.ColumnSpan="2" MinHeight="30" Margin="20"></ComboBox> 
        <TextBlock Grid.Row="1">中文预览:</TextBlock> 
        <TextBlock Grid.Row="2" Name="text" FontSize="30">你选择的字体</TextBlock> 
        <TextBlock Grid.Row="1" Grid.Column="2">英文预览:</TextBlock> 
        <TextBlock Grid.Row="2" Grid.Column="2" FontSize="30" FontFamily="{Binding Path=FontFamily,ElementName=text}">You Selected Font</TextBlock> 
        <Border Grid.ColumnSpan="2" Grid.Row="3">        
           <DockPanel> 
             <TextBlock DockPanel.Dock="Top">字体详细信息:</TextBlock>       
                <StackPanel> 
                    <StackPanel Orientation="Horizontal"> 
                        <TextBlock>字体名称:</TextBlock> 
                        <TextBox Text="{Binding ElementName=text,Path=FontFamily}" Name="fontname"></TextBox> 
                    </StackPanel> 
                        
                </StackPanel> 
                <Button HorizontalAlignment="Center" VerticalAlignment="Bottom" DockPanel.Dock="Bottom" Click="Button_Click_1"> 
                   <Button.Style> 
                       <Style> 
                           <Style.Triggers> 
                               <Trigger Property="Button.IsMouseOver" Value="True"> 
                                   <Setter Property="Button.Foreground" Value="Blue"></Setter> 
                               </Trigger> 
                               <Trigger Property="Button.IsMouseOver" Value="False"> 
                                   <Setter Property="Button.Foreground" Value="Black"></Setter> 
                               </Trigger> 
                           </Style.Triggers> 
                       </Style> 
                   </Button.Style> 
                   <Button.Template> 
                       <ControlTemplate> 
                            <TextBlock > 
                                <Underline>关注我的新浪微博</Underline> 
                            </TextBlock>   
                       </ControlTemplate> 
                   </Button.Template> 
               </Button>    
           </DockPanel> 
        </Border> 
    </Grid> 
</Window>

 

其中用了元素绑定,如  FontFamily=”{Binding Path=FontFamily,ElementName=text}”>,ElementName代表要绑定的元素名称(Name属性),Path代表要绑定的属性名称。

这里我们用Fonts.SystemFontFamilies集合获取系统内安装的字体,然后使用foreach循环添加字体到名称到ComboBox的Items集合中。

窗口load事件代码:

foreach (FontFamily font in Fonts.SystemFontFamilies)

{

     fonts.Items.Add(font.Source);
/* 何问起 hovertree.com */
}

 

运行一下,会发现ComboBox中显示出所有字体的名称,但美中不足的是不能在列表中显示出字体的字形,我们可以用自定义控件解决。

建一个WPF控件(取名Items),里面放一个TextBlock控件,命名为text,然后在构造函数中键入以下代码:

public Items(FontFamily font) 

    InitializeComponent(); 
    text.FontFamily = font; 
    text.Text= font.Source; 
   
}

其中增加了一个参数用以接受FontFamily对象,设置TextBlock的内容和FontFamily为传递来的参数。

代码如下:

foreach (FontFamily font in Fonts.SystemFontFamilies)  //遍历字体集合中德字体 
{ 
    /* 何问起 hovertree.com */
    fonts.Items.Add(new Items(font));//将参数传递到自定义控件 
}

 

这样就OK了。

推荐:http://www.cnblogs.com/roucheng/category/827769.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120314.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月27日 下午5:00
下一篇 2021年12月27日 下午6:00


相关推荐

  • RTCM格式解析

    RTCM格式解析RTCM 为应对 GNSS 实时数据服务 RadioTechnic 提出了一种通用的 GNSS 数据编码格式用于网络通讯 与后处理常用的 RINRX 文件格式类似 RTCM 可以说是实时 GNSS 服务中的 RINEX 文件 在实时 PPP RTK 定位计算中几乎都会使用 在实际使用时 RTCM 以二进制序列的数组播发 其播发数据的格式如下图所示 如上表所示 RTCM 播发包括序言 保留字 信息占用字节个数 信息 和 CRC CyclicRedund

    2026年3月18日
    1
  • Python石头剪刀布小游戏

    Python石头剪刀布小游戏

    2021年5月31日
    115
  • softmax 函数

    softmax 函数机器学习分为两种 一种是做分类 一种是做回归 softmax 函数就是用来做分类的 softmax 函数定义 importnumpya np array 0 3 2 9 4 0 defsoftmax a c np max a exp a np exp a c sum exp a np sum exp a y e

    2026年3月16日
    3
  • 以太坊(ETH)挖矿最新教程_以太坊个人挖矿

    以太坊(ETH)挖矿最新教程_以太坊个人挖矿以太坊(ETH)挖矿最新教程目前网上的大多数以太坊挖矿教程是很早整理编写的,基本都已过时不适用了。但挖矿是一个技术持续升级更新的过程,因此根据最新实战情况编写了本文,并争取在以后抽时间持续保持跟进更新。一.基本要求ETH 挖矿主要是使用显卡来挖矿。因此你需要一台拥有以下设备的PC(矿机):显卡、主板、电源、CPU、内存(推荐4G)、硬盘(推荐60G的SSD)、PCI-E转接线

    2022年10月15日
    5
  • 孤儿进程与僵尸进程[总结]「建议收藏」

    孤儿进程与僵尸进程[总结]「建议收藏」1、前言之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入

    2022年7月2日
    26
  • 孙鑫VC视频教程笔记——Lesson2

    孙鑫VC视频教程笔记——Lesson21.函数重载发生在一个类里的,而函数的覆盖是发生在两个类之间(比如父类和子类)2.如果在基类中有一个函数是虚函数,子类有调用子类的,子类没有调用父类的。3.纯虚函数类似于JAVA中的接口类,必须被实现了才能创建对象。4.引用相当于给变量起别名,它必须在声明时就初始化。tip:按F2可以重命名文件5.在包含头文件时,使用“”和6.预编译指令符#ifndef#define#endif可以用于防止重

    2022年5月16日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号