一个简单的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 ...
随机推荐
- JavaScript的前世今生
和CSS一样,JavaScript在各浏览器下并非完全一致,它所带来的兼容性问题时常困扰着我们,以至于现在“能否处理流行浏览器的兼容性问题”成为了检验一个程序员是否合格的标准之一.了解JavaScri ...
- C#图片色彩的纠正-上
WPF(C#)图片色彩的纠正-上 WPF(C#)图片色彩的纠正-下 前言 对图片进行色彩的纠正,其实与WPF是没有什么关系的,为什么标题又是“WPF(C#)图片色彩的纠正”呢,因为这些图片色彩的纠正功 ...
- 学习scala03 控制结构
scala拥有非常宽松的控制结构. if与while scala中的if和while几乎和java中的结构一模一样. //if语句 val a= ){ println(“”) }else{ print ...
- 【VC++技术杂谈004】使用微软TTS语音引擎实现文本朗读
本文主要介绍如何使用微软TTS语音引擎实现文本朗读,以及生成wav格式的声音文件. 1.语音引擎及语音库的安装 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把文本转化为语 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (36) ------ 第六章 继承与建模高级应用之TPC继承映射
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-12 TPC继承映射建模 问题 你有两张或多张架构和数据类似的表,你想使用TP ...
- MongoDB 搭建分片集群
在MongoDB(版本 3.2.9)中,分片是指将collection分散存储到不同的Server中,每个Server只存储collection的一部分,服务分片的所有服务器组成分片集群.分片集群(S ...
- SQL Server 通过备份文件初始化复制
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...
- 【Win 10 应用开发】RTM版的UAP项目解剖
Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...
- 【Win10 应用开发】自适应Toast通知的XML文档结构
老规矩,在开始之前老周先讲个故事. 话说公元2015年7月20日,VS 2015发布.于是,肯定有人会问老周了,C#6有啥新特性,我学不来啊.学不来的话你应该检讨.老周比较保守地计算一下,学会C# 6 ...
- C指针(二)
原文链接:http://www.orlion.ga/924/ 一.指针与const限定符 const限定符与指针结合起来常见的情况有一下几种: const int *a; int const *a; ...