2014-04-16 10 views
12

का उपयोग कर WPF में फ़ॉन्ट आइकन बदलना मैं अपने सी # डब्ल्यूपीएफ एप्लिकेशन के भीतर मूल फ़ॉन्ट छवियों को प्रस्तुत करने के लिए फ़ॉन्ट विस्मयकारी आइकन का उपयोग कर रहा हूं। रन-टाइम के दौरान जब मैं टेक्स्टब्लॉक को एक अलग फ़ॉन्ट आइकन प्रदर्शित करने का प्रयास करता हूं लेकिन फ़ॉन्ट आइकन के बजाय यूनिकोड प्रतिनिधित्व प्रदर्शित होता है।फ़ॉन्ट विस्मयकारी

मैंने इसे प्रदर्शित करने के लिए एक नमूना आवेदन बनाया है। जब किसी भी बटन पर क्लिक किया जाता है, तो यह टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी को संबंधित आइकन के लिए यूनिकोड के साथ बदल देता है। प्रोजेक्ट में एक संसाधन फ़ोल्डर है जिसमें FontAwesome.ttf फ़ॉन्ट फ़ाइल एक बिल्ड संसाधन के रूप में है जो टेक्स्टब्लॉक का फ़ॉन्टफैमिली संपत्ति संदर्भ है।

यहाँ मेरी नमूना आवेदन के स्रोत कोड है:

कोड-पीछे:

namespace FontAwesomeTest 
{ 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void btnGlass_Click(object sender, RoutedEventArgs e) 
    { 
     tblkFontIcon.Text = "";    
    } 

    private void btnMusic_Click(object sender, RoutedEventArgs e) 
    { 
     tblkFontIcon.Text = ""; 
    } 

    private void btnSearch_Click(object sender, RoutedEventArgs e) 
    { 
     tblkFontIcon.Text = ""; 
    }   
} 
} 

XAML:

<Window x:Class="FontAwesomeTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Font Awesome Test Window" Height="300" Width="330" Name="FontAwesomeTestWindow"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50"/> 
     <RowDefinition Height="25"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Button Name="btnGlass" Height="35" Width="85" Click="btnGlass_Click" >Glass</Button> 
    <Button Name="btnMusic" Grid.Column="1" Height="35" Width="85" Click="btnMusic_Click">Music</Button> 
    <Button Name="btnSearch" Grid.Column="2" Width="85" Height="35" Click="btnSearch_Click">Search</Button> 
    <TextBlock Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" FontFamily="../Resources/#FontAwesome">&#xf000;</TextBlock> 
    <TextBlock Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" FontFamily="../Resources/#FontAwesome">&#xf001;</TextBlock> 
    <TextBlock Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="18" FontFamily="../Resources/#FontAwesome">&#xf002;</TextBlock> 
    <TextBlock Name="tblkFontIcon" Grid.Row="2" Grid.ColumnSpan="3" FontSize="64" FontFamily="../Resources/#FontAwesome" HorizontalAlignment="Center" VerticalAlignment="Center">&#xf011;</TextBlock> 
</Grid> 

मैं में फ़ॉन्ट बहुत बढ़िया शामिल करने के लिए निम्नलिखित ट्यूटोरियल का इस्तेमाल किया मेरी आवेदन http://www.codeproject.com/Tips/634540/Using-Font-Icons

तो संक्षेप में, मैं आइकन कैसे बदल सकता हूं लेकिन एक आइकन डिस्प्ले है - यूनिकोड नहीं?

अग्रिम धन्यवाद।

उत्तर

14

अद्यतन

मैं इस विषय के लिए एक अलग पोस्ट पाया - Add Icon font in wpf मुझे लगता है कि यह तुम क्या चाहते करने के लिए और अधिक संभावना होना चाहिए।

सुनिश्चित करें कि आपका फ़ॉन्ट संसाधन के रूप में जोड़ा गया है। तब, निम्न स्ट्रिंग का उपयोग करें:

<Setter Property="TextElement.FontFamily" Value="pack://application:,,,/fonts/#FontAwesome" /> 

ऊपर स्ट्रिंग में, मैं यह सोचते हैं रहा है कि फ़ॉन्ट का नाम (नहीं फॉन्ट के फ़ाइल नाम) FontAwesome है।

  1. अपनी परियोजना के लिए फ़ॉन्ट जोड़ें, मान लीजिए कि आप उन में "फोंट"
  2. बदलें को कार्रवाई बिल्ड एक फ़ोल्डर में नहीं डाल संसाधनकहना है:

तुम बस करने की जरूरत है एंबेडेड संसाधन

  • फ़ॉन्ट शैली को ऊपर स्निप की तरह फ़ॉन्ट परिवार सेट करने के लिए अपनी शैली जोड़ें, और TextBlock.Text को अपने पसंदीदा आइकन पर सेट करें और लागू करें टेक्स्टब्लॉक की शैली।
  • आप TextBlock.Text संपत्ति को अपडेट करके चिह्न बदलने चाहते हैं, आप समर्थित यूनिकोड तार के साथ Text संपत्ति स्थापित करना चाहिए।

    tblkFontIcon.Text = "\uf000"; 
    
    बजाय

    tblkFontIcon.Text = "&#xf000;"; 
    

    तरह की कोशिश कुछ your're से Using Font Icons

    कोड का उपयोग कर तो आप शायद उस पोस्ट में "यह कैसे काम करता" खंड याद किया । आपको टेक्स्टब्लॉक का उपयोग करने के बजाय उस मार्कअप एक्सटेंशन का उपयोग करना चाहिए। अतिरिक्त संपत्ति।

    अपने नमूना कोड में:

    WpfTools:ImageFromFont को
    <RibbonButton Label="Import data" 
        LargeImageSource="{WpfTools:ImageFromFont Text=&#xf01a;, 
        FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" /> 
    

    वेतन ध्यान, यह Markup Extention है, यह XAML पार्सर एक ImageSource को

    {WpfTools:ImageFromFont Text=&#xf01a;, 
         FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown} 
    

    बदलने और LargeImageSource प्रॉपर्टी को निर्दिष्ट करने की अनुमति देता ।

    अपने XAML में

    तो, आप एक Image साथ TextBlock की जगह सकता है, तो यह होना चाहिए कुछ की तरह:

    <Image Source="{WpfTools:ImageFromFont Text=&#xf000;, 
         FontFamily=/RibbonFontIconSample;component/Resources/#FontAwesome, Brush=Brown}" /> 
    

    आप आइकन को बदलना चाहते हैं, तो आप, ImageSource अपने आप को बदलना होगा बस अपनी खुद की विधि बनाने के लिए Using Font Icons का पालन करें, या बस उस ट्यूटोरियल से निम्न कोड कॉपी करें।

    private static ImageSource CreateGlyph(string text, 
         FontFamily fontFamily, FontStyle fontStyle, FontWeight fontWeight, 
         FontStretch fontStretch, Brush foreBrush) 
    { 
        if (fontFamily != null && !String.IsNullOrEmpty(text)) 
        { 
         Typeface typeface = new Typeface(fontFamily, fontStyle, fontWeight, fontStretch); 
         GlyphTypeface glyphTypeface; 
         if (!typeface.TryGetGlyphTypeface(out glyphTypeface)) 
           throw new InvalidOperationException("No glyphtypeface found"); 
    
         ushort[] glyphIndexes = new ushort[text.Length]; 
         double[] advanceWidths = new double[text.Length]; 
         for (int n = 0; n < text.Length; n++) 
         { 
          ushort glyphIndex = glyphTypeface.CharacterToGlyphMap[text[n]]; 
          glyphIndexes[n] = glyphIndex; 
          double width = glyphTypeface.AdvanceWidths[glyphIndex] * 1.0; 
          advanceWidths[n] = width; 
         } 
    
         GlyphRun gr = new GlyphRun(glyphTypeface, 0, false, 1.0, glyphIndexes, 
                new Point(0, 0), advanceWidths, 
                null, null, null, null, null, null); 
         GlyphRunDrawing glyphRunDrawing = new GlyphRunDrawing(foreBrush, gr); 
         return new DrawingImage(glyphRunDrawing); 
    
        } 
        return null; 
    } 
    
    +0

    सबसे पहले - शीघ्र प्रतिक्रिया के लिए धन्यवाद! आपके द्वारा प्रदान किया गया अपडेट यह है कि मैं वर्तमान में अपने WPF एप्लिकेशन में फ़ॉन्ट्स का उपयोग कैसे कर रहा हूं। जैसा कि सवाल बताता है, यह वर्तमान में काम करता है लेकिन यूनिकोड प्रदर्शित करता है जब मैं टेक्स्ट प्रॉपर्टी बदलता हूं, भले ही मैं इसे एक ही यूनिकोड में बदलूं। मैंने इसकी छवियों को शामिल करने की कोशिश की लेकिन पर्याप्त 'सड़क क्रेडिट' नहीं है। फ़ॉन्ट आइकन का उपयोग करने के लिए, मैं यह समझ नहीं सकता कि रनटाइम पर आइकन बदलने के लिए इसका उपयोग कैसे किया जाए क्योंकि मेरी आवश्यकता की आवश्यकता है। मैं डिजाइन/बिल्ड समय के दौरान काम करने के लिए इसे प्राप्त कर सकते हैं। – Gareth

    +0

    मुझे लगता है कि आपको इसे "& # xf000;" के साथ सेट करने के बजाय टेक्स्ट को यूनिकोड स्ट्रिंग के साथ सेट करना चाहिए। – terry

    +0

    मैंने अपडेट किया है, और आप अपने टेक्स्टब्लॉक को बदलने के लिए उस कोड का अनुसरण कर सकते हैं। किसी अन्य यूनिकोड स्ट्रिंग पर आगे बढ़ें, और यह काम करना चाहिए। – terry

    19

    मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन फ़ॉन्ट बहुत बढ़िया एक NuGet पैकेज FontAwesome.UWP और FontAwesome.WPF नामित किया है। बस इसमें से एक डाउनलोड करें।

    NuGet Packages for Font Awesome

    आप अपने XAML कोड में एक आइकन आयात नाम स्थान पालन का उपयोग करेगा, तो:

    xmlns:fa="http://schemas.fontawesome.io/icons/" 
    

    इस तरह अपने बटन में उपयोग करें:

    <Button x:Name="btnButton"> 
        <Button.Content> 
         <fa:ImageAwesome Icon="LongArrowLeft"/> 
        </Button.Content> 
    </Button> 
    

    और अंत में अपने सी # में कोड पीछे:

    using FontAwesome.WPF; // on the top of the code 
    btnButton.Content = FontAwesomeIcon.LongArrowRight; 
    
    +2

    यह एक बहुत ही अच्छा तरीका है कि यह Fontawesome का उपयोग करने के लिए कैसे सुविधाजनक हो जाता है। – LuckyLikey

    +0

    अफसोस की बात यह टूलबार (कमांडबार?) आइकन के लिए काम नहीं करती है – Denny

    +0

    उसी एक्सएएमएल के लिए, मुझे निम्नलिखित कोड का उपयोग करना पड़ा: '(btnButton. ImageAwesome के रूप में सामग्री) Icon = FontAwesomeIcon.LongArrowRight;' – Matt

    संबंधित मुद्दे