一個簡單的WPF字體選擇器實現


很久沒有寫博客了。

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

這就是我寫的一個字體選擇器,界面如下:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM