WEB开发网
开发学院WEB开发ASP.NET WPF学习笔记7. Resource 阅读

WPF学习笔记7. Resource

 2010-10-11 16:19:14 来源:本站整理   
核心提示:当然,静态资源也有另外一个麻烦,WPF学习笔记7. Resource(4),就是不支持前向引用(Forward Reference),也就是说我们必须先定义资源,那么 Dictionary2.label1 将获胜,在程序代码中我们可以用 FindResource/TryFindResource 设置静态资源,然后才能使

当然,静态资源也有另外一个麻烦,就是不支持前向引用(Forward Reference),也就是说我们必须先定义资源,然后才能使用静态引用。

<Window x:Class="Learn.WPF.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1">
  <Grid>
    <StackPanel>
      <Label Content="{StaticResource label}" />
    </StackPanel>
  </Grid>
  <Window.Resources>
    <ContentControl x:Key="label">Hello, World!</ContentControl>
  </Window.Resources>
</Window>

属于静态资源的异常出现了,当然动态资源是没有这个问题的。

如果有必要的话,我们可以将逻辑资源分散定义在多个 XAML 文件(Resource Dictionary) 中。

Dictionary1.xaml

<ResourceDictionary 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <ContentControl x:Key="label1">Hello, World!</ContentControl>
</ResourceDictionary>

Dictionary2.xaml

<ResourceDictionary 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <ContentControl x:Key="label2">Hello, C#!</ContentControl>
</ResourceDictionary>

Window1.xaml

<Window x:Class="Learn.WPF.Window1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Window1">
  <Window.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Dictionary1.xaml" />
        <ResourceDictionary Source="Dictionary2.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </Window.Resources>
  <Grid>
    <StackPanel>
      <Label Content="{DynamicResource label1}" />
      <Label Content="{DynamicResource label2}" />
    </StackPanel>
  </Grid>
</Window>

如果合并的字典中有重复的键值,那么最后加入的资源将优先。比如 Dictionary1.xaml 和 Dictionary2.xaml 都有一个 x:Key="label1" 的资源,那么 Dictionary2.label1 将获胜。

在程序代码中我们可以用 FindResource/TryFindResource 设置静态资源,用 SetResourceReference 设置动态资源。

this.labelA.Content = (ContentControl)this.labelA.FindResource("key1"); // StaticResource
this.labelB.SetResourceReference(Label.ContentProperty, "key2"); // DynamicResource

上一页  1 2 3 4 

Tags:WPF 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接