zoukankan      html  css  js  c++  java
  • WPF应用程序使用资源及多语言设置学习1

    最近学习dotnet多语言资源的设置,很多地方没有搞清楚,于是参考msdn写了点代码验证下想法。

    测试程序是一个wpf默认程序,语言和资源均不做设置。

    字符串资源

    在默认资源文件中添加一条string1=teststring,编译之后用工具查看程序集可以发现字符串资源保存在名为"MySampleApp.Properties.Resources.resources"的资源中,其中MySampleApp为程序集的命名空间,"Properties.Resources"是默认资源文件的名称,".resources"是资源扩展名。

    读取此字符串资源代码如下:

    //直接调用资源编辑器生成的类方法
    Mywindow.Title =  MySampleApp.Properties.Resources.string1;

    //或者使用通用方法
    var rm = new ResourceManager("MySampleApp.Properties.Resources", Assembly.GetExecutingAssembly());
    Mywindow.Title 
    = rm.GetString("string1");


    读取字符串资源的xaml代码如下:

    <StackPanel Name="root"
               xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:res
    ="clr-namespace:MySampleApp.Properties"
               x:Class
    ="MySampleApp.MyPage">
    <TextBlock Name="Text1" Text="{x:Static res:Resources.string1}"></TextBlock>
    </StackPanel>

     注意如果想让上面的xaml代码能正常读取系统默认字符串资源,需要设置资源访问属性为public,如图所示:

     

    图片资源

    在资源编辑器中添加一个png图片,名为img,资源中的图片格式为System.Drawing.Bitmap。

    读取img就是调用rm.GetObject("img"),返回对象是Bitmap类型,此对象无法直接用在WPF的Image控件上,必须做一些转换工作,转换Bitmap为BitmapImage.

    var rm = new ResourceManager("MySampleApp.Properties.Resources", Assembly.GetExecutingAssembly());          
    var bmp 
    = rm.GetObject("img"as Bitmap;
    var stream 
    = new MemoryStream();
    var bi 
    = new BitmapImage();
    bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
    bi.BeginInit();
    bi.StreamSource 
    = stream;
    bi.EndInit();
    image1.Source 
    = bi;

    第二种方法:转换Bitmap为BitmapSource.

    IntPtr bmpPt = bmp.GetHbitmap();
    System.Windows.Media.Imaging.BitmapSource bitmapSource 
    = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
        bmpPt, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    bitmapSource.Freeze();
    DeleteObject(bmpPt);
    image1.Source 
    = bitmapSource;

    [System.Runtime.InteropServices.DllImport(
    "gdi32.dll")]
    private static extern int DeleteObject(IntPtr o);

  • 相关阅读:
    PHP学习笔记一
    抓取【你懂的】应用的数据
    抓取[今日新闻]应用的数据
    开源项目Html Agility Pack实现快速解析Html
    澳大利亚玩全攻略(图文全彩版)
    畅游夏威夷,看这本就够了
    科学丨光的折射
    未解之谜.下
    科学是什么
    大脑奥秘知多少:脑科学初探
  • 原文地址:https://www.cnblogs.com/xwing/p/1490240.html
Copyright © 2011-2022 走看看