我可以在WPF中动态创建图标吗?

时间:2011-05-11 14:53:44

标签: c# .net wpf gdi

由于我之前的question没有到达任何地方,我想知道,有什么方法可以在WPF上动态创建图标吗?

5 个答案:

答案 0 :(得分:1)

您不需要WPF。使用GDI +(System.Drawing.dll),您可以创建一个16x16 Bitmap,然后调用Icon.FromHandle(bitmap.GetHicon())

答案 1 :(得分:0)

您可以使用WritableBitmap

答案 2 :(得分:0)

你可以使用任务栏图标进度条......当然你已经看过,大多数应用程序如果做任何扫描或进展的事情,它会在Icon上显示进度操作。

在您的主要表单中执行此操作,其中包含图标

<Window x:Class="CCTrayHelper.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    Icon="/CCTrayHelper;component/Images/CCTrayHelperIcon.png">

<Window.TaskbarItemInfo>
    <TaskbarItemInfo />
</Window.TaskbarItemInfo>

从后面的代码中触发它

 private void OnProgress(object sender, EventArgs args)
    {
        Dispatcher.Invoke(DispatcherPriority.Send, (Action)delegate() { TaskbarItemInfo.ProgressState = TaskbarItemProgressState.None; });
        // Use here your progress type
    }

答案 3 :(得分:0)

这就是我最终做的,我不完全理解细节,如果你发现任何可以改进的东西,请做评论。感谢所有的答案和评论。

 public static ImageSource GetIconWithText(int digit)
 {
     BitmapImage myBitmapImage = new BitmapImage(new Uri(@"Images\PomoDomo.ico", 
         UriKind.RelativeOrAbsolute));

     DrawingVisual drawingVisual = new DrawingVisual();

     using (DrawingContext drawingContext = drawingVisual.RenderOpen())
     {
         // Draw image
         drawingContext.DrawImage(myBitmapImage, new Rect(0, 0, myBitmapImage.Width, 
             myBitmapImage.Height));

         var typeFace = new Typeface(new FontFamily("Verdana"), FontStyles.Normal, 
             FontWeights.ExtraBold, FontStretches.UltraCondensed);
         var formatedText = new FormattedText(digit.ToString(),
               CultureInfo.InvariantCulture,
               FlowDirection.LeftToRight,
               typeFace,
               40, 
               System.Windows.Media.Brushes.White);

         //Center the text on Image
         int pointY = (int)(myBitmapImage.Height - formatedText.Height) / 2;
         int pointX = (int)(myBitmapImage.Width - formatedText.Width) / 2;

         drawingContext.DrawText(formatedText, new Point(pointX, pointY));
     }

     RenderTargetBitmap finalBitmap = new RenderTargetBitmap((int)myBitmapImage.Width, 
         (int)myBitmapImage.Height, myBitmapImage.DpiX, myBitmapImage.DpiY, 
         PixelFormats.Pbgra32);
     finalBitmap.Render(drawingVisual);
     return finalBitmap;
 }

 private static void SaveImage(RenderTargetBitmap returnBitmap, string pngFileName)
 {
     string fileName = string.Format("{0}.png", pngFileName)
     PngBitmapEncoder image = new PngBitmapEncoder();
     image.Frames.Add(BitmapFrame.Create(returnBitmap));
     using (Stream fs = File.Create(fileName))
     {
         image.Save(fs);
     }
 }

答案 4 :(得分:0)

您可以找到方法herehere来在writeablebitmap上呈现文字