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

WPF学习笔记7. Resource

 2010-10-11 16:19:14 来源:本站整理 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫嶅銈嗗姉閸樠囧煡婢跺á鐔兼煥鐎n兘鍋撴繝姘拺鐟滅増甯掓禍浼存煕閹惧鈽夐柍缁樻煥椤繈鎳滅喊妯诲闂備礁鎲$粙鎴︺偑閺夋垟鏋旈柡鍐e亾缂佺粯绋撴禒锕傚磼濮橆剦鐎抽梻浣哥-缁垶骞戦崶顒傚祦閻庯綆浜栭弨浠嬫煙闁箑澧い鏂垮€规穱濠囨倷椤忓嫧鍋撻弽褜娼栧┑鐘宠壘閸屻劎鎲歌箛娑樼疅闁圭虎鍠楅弲鎼佹煥閻曞倹瀚�
核心提示:资源查找: 引用逻辑资源时首先会查找父元素 Resources 集合,如未找到,WPF学习笔记7. Resource(3),会逐级检查更上层的父元素,如果直到根元素依然未找到有效的逻辑资源定义,因此它不能像静态资源那样引用一个完整的元素对象,<Windowx:Class="Learn.WPF.Windo

资源查找: 引用逻辑资源时首先会查找父元素 Resources 集合,如未找到,会逐级检查更上层的父元素。如果直到根元素依然未找到有效的逻辑资源定义,那么 WPF 会检查 Application.Resources (App.xaml 中定义) 和系统属性集合(SystemParamters 等)。每个独立的资源字典中键名不能重复,但在多个不同层级的资源字典中允许重复,离资源引用最近的那个逻辑资源项被优先采纳。

<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>
    <Label x:Key="label1" Content=" Hello, World!" />
  </Window.Resources>
  <Grid>
    <Grid.Resources>
      <Label x:Key="label1" Content=" Hello, C#!" />
    </Grid.Resources>
    <StackPanel>
      <StaticResource ResourceKey="label1" />
    </StackPanel>
  </Grid>
</Window>

将显示 "Hello, C#!"。

逻辑资源的引用方式又分类 "静态(StaticResource)" 和 "动态(DynamicResource)" 两种方式,区别在于静态引用仅在第一次资源加载时被应用,而动态引用则会在资源被更改时重新应用。

<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>
    <ContentControl x:Key="label1" x:Shared="False">Hello, World!</ContentControl>
  </Window.Resources>
  <x:Code>
    private void button1_Click(object sender, RoutedEventArgs e)
    {
      this.Resources["label1"] = "Hello, C#!";
    }
  </x:Code>
  <Grid>
    <StackPanel>
      <Label x:Name="label1" Content="{StaticResource label1}" />
      <Label x:Name="label2" Content="{DynamicResource label1}" />
      <Button x:Name="button1" Click="button1_Click">Test</Button>
    </StackPanel>
  </Grid>
</Window>

单击按钮后,你会发现 label2 实时反应了资源的修改。

动态资源只能用于设置依赖属性值,因此它不能像静态资源那样引用一个完整的元素对象。

<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>
    <Label x:Key="label" x:Shared="False" Content="Hello, World!" />
  </Window.Resources>
  <Grid>
    <StackPanel>
      <DynamicResource ResourceKey="label" />
    </StackPanel>
  </Grid>
</Window>

这将导致出现下图这样的异常,而静态资源则没有这个问题。

上一页  1 2 3 4  下一页

Tags:WPF 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接