深入浅出WPF--笔记(2015.03.29)

    使用资源的方式有两种:静态方式和动态方式。静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不会再去访问该资源;动态资源使用(DynamicResource)指的是在程序运行过程中仍然会去访问的资源。示例如下:

XAML代码:

<Window x:Class="MyTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyTest"
    Title="WPF" Height="205" Width="250">
    <Window.Resources>
        <TextBlock x:Key="res1" Text="海上生明月"/>
        <TextBlock x:Key="res2" Text="海上生明月"/>
    </Window.Resources>
    <StackPanel>
        <Button Margin="5, 5, 5, 0" Content="{StaticResource ResourceKey=res1}"/>
        <Button Margin="5, 5, 5, 0" Content="{DynamicResource ResourceKey=res2}"/>
        <Button Margin="5, 5, 5, 0" Content="Update" Click="Button_Click"/>
    </StackPanel>
</Window>

 

C#代码:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            this.Resources["res1"] = new TextBlock { Text = "天涯共此时" };
            this.Resources["res2"] = new TextBlock { Text = "天涯共此时" };
        }
    }

======================================================================

    资源文件在目标文件里以二进制数据的形式存在、形成目标文件的资源段(Resource Section),使用时数据会被提取出来,为应用程序内嵌资源;称资源词典里的资源为"WPF资源"或“对象资源”,称应用程序的内嵌资源为“程序集资源”或“二进制资源”。特别提醒一点,WPF程序中写在<Application.Resources>...</Application.Resources>标签内的资源仍然是WPF资源而非二进制资源。

    若要添加的资源是字符串而非文件,可使用Properties名称空间中的Resources.resx资源文件。Resources.resx文件内容的组织形式也是“键--值”对,编译后,Resources.resx会形成Prperties名称空间中的Resources类,使用这个类的方法或属性就能获得资源。为了让XAML编译器能够访问这个类,一定要把Resources.resx的访问级别由Internal改为Public。在XAML代码中使用Resources.resx中的资源,先要把程序的Properties名称空间映射为XAML名称空间,然后使用x:Static标签扩展来访问资源。示例如下:

XAML代码:

<Window x:Class="MyTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyTest"
    xmlns:prop="clr-namespace:MyTest.Properties"
    Title="WPF" Height="205" Width="250">
    <Grid Margin="5">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="4"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="23"/>
            <RowDefinition Height="4"/>
            <RowDefinition Height="23"/>
        </Grid.RowDefinitions>
        <TextBlock Text="{x:Static prop:Resources.UserName}"/>
        <TextBlock x:Name="textBlockPassword" Grid.Row="2"/>
        <TextBox BorderBrush="Black" Grid.Column="2"/>
        <TextBox BorderBrush="Black" Grid.Column="2" Grid.Row="2"/>
    </Grid>
</Window>

C#代码:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.textBlockPassword.Text = Properties.Resources.Password;
        }
    }

使用Resources.resx最大的好处就是便于程序的国际化、本地化。

    在WPF中使用外部文件作为资源,仅需简单地将其加入项目即可。注意:如果想让外部文件编译进目标成为二进制资源,必须在属性窗口中把文件的BuildAction属性值设为Resource。

    WPF对二进制资源的访问有自己的一套方法,称为Pack URI路径,格式:

    pack://application,,,[程序集名称;][可选版本号;][文件夹名称/]文件名称。

常用格式如下:

    [文件夹名称/]文件名称

你可能感兴趣的:(WPF,resource)