一个简单的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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何设置网址跳转_怎么让域名跳转到另一个域名

    如何设置网址跳转_怎么让域名跳转到另一个域名一、什么是URL转发?URL(UniformResourceLocator:统一资源定位器)是WWW页的地址,它从左到右由下述部分组成:Internet资源类型(scheme):指出WWW客户程序用来操作的工具。如“http://”表示WWW服务器,“ftp://”表示FTP服务器,“gopher://”表示Gopher服务器,而“new:”表示Newgroup新闻组。服务器地址…

    2022年10月10日
    2
  • Guava之Stopwatch「建议收藏」

    Guava之Stopwatch「建议收藏」Guava之Stopwatch计时器Stopwatch用来计算经过的时间(精确到纳秒)。这个类比调用System.nanoTime()优势在于:性能表现形式更丰富一、类声明以下是com.google.common.base.Stopwatch类的声明:publicfinalclassStopwatchextendsObject二、类方法方法类型方法…

    2022年6月23日
    97
  • 处理pdb文件

    处理pdb文件importosfrommathimportsqrtimportnumpyimporttorchfromBio.PDBimportPDBParserfromtorch.utils.dataimportDataset,DataLoaderfromtorch.utils.tensorboardimportSummaryWriterdevice=torch.device(“cuda”)classP450Dataset(Dataset):de.

    2022年6月2日
    50
  • CSS面试题总结[通俗易懂]

    CSS面试题总结[通俗易懂]前面的话小柒前面总结了与HTML相关的面试题,这篇文章总结CSS相关面试题。题目(1)盒子模型的理解?盒模型分为两种:标准模式与混杂模式(IE模式)标准盒子模型IE盒子模型一般的我们所说的width、height都是指标准盒子模型下的width(也就是content)。(2)CSS中哪些属性可以同父元素继承?字体系列:font-family,font-siz…

    2022年5月6日
    27
  • ThinkPHP配置文件的加载

    ThinkPHP配置文件的加载

    2021年9月24日
    53
  • FM系列算法解读(FM+FFM+DeepFM)

    FM系列算法解读(FM+FFM+DeepFM)https://blog.csdn.net/jiangjiang_jian/article/details/80631180

    2022年6月12日
    40

发表回复

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

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