一个简单的WPF字体选择器实现
很久没有写博客了。
这是放暑假中的第一篇博客,以后会多多更新!!!
这就是我写的一个字体选择器,界面如下:

本程序用到的技术比较简单,仅仅是用了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
一个简单的WPF字体选择器实现的更多相关文章
- WInform 创建一个简单的WPF应用
(一)创建一个简单的WPF应用 首先,在这里我要说明的是:这里的例子,都是通过控制台程序来创建WPF应用,而非使用现成的WPF模版.因为WPF模版封装了创建WPF应用所需要的各种基本元素,并不利于我们 ...
- 制作一个简单的WPF图片浏览器
原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1. 对指定文件夹下所有JPG文件进行预览2. 对选定图片进行旋转3. 对选定图片 ...
- 快速设计一个简单的WPF串口上位机
最近一直在学习UWP,其中有的技术参考了WPF,所以又回头再来学习WPF,感觉学的东西很杂,必须记录一下,不然时间长了还得忘掉,于是申请开始写博客,将学习的心得记录一下,以备后用.这次是因为公司内训, ...
- 分析一个简单的WPF程序
1.新建WPF项目 使用Visual Studio 代码编辑器点击新建项目,选择 WPF应用后点击下一步: 在新窗口中我们填写项目名称.选择项目位置后点击创建就完成了WPF项目的创建. 2.WPF项目 ...
- 一个简单的WPF MVVM实例【转载】
引用地址:http://blog.csdn.net/yl2isoft/article/details/20838149 1 新建WPF 应用程序WPFMVVMExample 程序结构如下图所示. 2 ...
- 一个简单的 WPF 程序,用于显示实时时间
直接贴代码了: TimeShowerWindow.xaml <Window x:Class="HelloWorld.TimeShowerWindow" xmlns=" ...
- WPF 一个简单的颜色选择器
原文:WPF 一个简单的颜色选择器 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/8340999 ...
- Prism for WPF 搭建一个简单的模块化开发框架(五)添加聊天、消息模块
原文:Prism for WPF 搭建一个简单的模块化开发框架(五)添加聊天.消息模块 中秋节假期没事继续搞了搞 做了各聊天的模块,需要继续优化 第一步画页面 页面参考https://github.c ...
- Prism for WPF 搭建一个简单的模块化开发框架(二)
原文:Prism for WPF 搭建一个简单的模块化开发框架(二) 今天又有时间了,再改改,加了一些控件全局的样式 样式代码 <ResourceDictionary xmlns="h ...
随机推荐
- Lesson 4 An existing trip
Text I have just received a letter from my brother,Tim. He is in Australia. He has been there for si ...
- RCF进程间通信Demo程序
在上一篇文章RPC通信框架--RCF介绍中,介绍了RCF的优点,本篇文章从头开始演示如何用RCF编写一个跨进程通信的Demo程序. 将RCF编译为静态库 从官网下载到的源码中包含一个RCF的项目,但是 ...
- 备忘录:hadoop技术一点积累
1.hbase的rowkey是按字典排序的,我看有的资料建议rowkey设计不应该是自增的,应该和这个字典排序相关吧 2.hbase的数据存储是按照region来的,region的设计前段时间在坐飞机 ...
- C#开发EyeLink眼动仪的实验程序
[题外话] Eyelink眼动仪是SR Research推出的一款眼动仪,很多高校都在使用其做实验.其官方提供了COM的接口,所以支持COM接口的开发平台都可以开发使用.官方甚至提供了一个C#的样例供 ...
- Node.js Base64 Encoding和Decoding
如何在Node.js中encode一个字符串呢?是否也像在PHP中使用base64_encode()一样简单? 在Node.js中有许多encoding字符串的方法,而不用像在JavaScript中那 ...
- [nodemon] Internal watch failed: watch ENOSPC错误解决办法
运行环境:Ubuntu 16.04, WebStorm 2016.1.3, node.js v0.12.5, nodemon 1.9.2 在WS自带的终端输入nodemon server.js启动项目 ...
- Hibernate
- Report processing of Microsoft Dynamic AX
Report processing of Microsoft Dynamic AX 版权声明:本文为博主原创文章,未经博主允许不得转载. The implementation of a general ...
- 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route
心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...
- Linq 知识回顾
开篇语 在说LINQ之前必须先说说几个重要的C#语言特性 与LINQ有关的语言特性 隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...