亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 擴展 > SilverLight > 正文

詳解Silverlight的對象樹

2024-09-06 20:41:34
字體:
來源:轉載
供稿:網友

在托管代碼或 JavaScript 中,您可以在運行時期間引用 Silverlight 的 Silverlight 對象樹中的 對象。本主題介紹如何在 Silverlight 托管 API 中使用對象樹。

對象樹

對象樹概念描述如何使在運行時在 Silverlight 內容中創建和存在的對象彼此相關。關系基于對象具 有屬性這一原則,在很多情況下屬性的值是另一個對象,而此對象也具有屬性。對象樹具有分支,因為其 中某些屬性是集合屬性并具有多個對象;并且,對象樹具有根,因為體系結構最終必須引用單個對象,而 該對象是與對象樹之外的概念(例如,瀏覽器宿主或顯示內容的 Silverlight 插件)之間的連接點。

盡管在概念上實際只有一個對象樹,但 Silverlight API 不向您公開完整的樹。大量的對象樹結構實 際上是實現詳細信息。而您具有對象特定的屬性,這些屬性影響樹中特定點的子項值并且可能報告父項( 在大多數情況下,父軸是只讀的,因為您通常是在代碼中或通過 XAML 分析過程從根向上構建樹)。例如 ,Panel 具有其 Children 屬性,該屬性設置子對象。FrameworkElement 具有用于報告父項的 Parent。 這兩個 API 都在基類中,因此,它們可用于大量的 Silverlight 對象。

Silverlight 中一個相關的樹概念是可視化樹??梢暬瘶涓拍钪傅氖禽^大的對象樹在經過編輯或篩選 后的表示形式。所應用的篩選器是在可視化樹中只存在具有呈現含義的對象。例如,某個集合類不是可視 化樹的一部分,而可視化樹將集合抽象為一個“子項”概念。然而,如果您將加載的源 XAML 標記視為與 對象樹近似的結構,則可視化樹也可以包含并不直接顯示的對象。這是因為,可視化樹也報告作為特定控 件(這些控件來自所應用的控件模板或資源字典)的組成部分的對象。可視化樹在內部用于 Silverlight 呈現過程,但了解一些有關可視化樹的內容對于某些情形通常很重要,例如,在應用模板后編寫或替換控 件模板或在運行時分析控件實例。對于這些情形,Silverlight 提供了 VisualTreeHelper API,它通過 一種方式檢查可視化樹,這種方式比您通過對象特定的父屬性和子屬性來實際實現更為一般化。

可視化樹概念也存在于 WPF 中,它與 Silverlight 的可視化樹概念類似。然而,一個顯著的差異是 WPF 還提供一個附加的篩選器或對象樹(稱為“邏輯樹”)的概念。邏輯樹概念與某些屬性系統行為相關 。Silverlight 不通過幫助器類來公開此邏輯樹。Silverlight 中的確存在某些(但并非所有)相關的屬 性行為,但由于沒有用于訪問這些行為的幫助器 API,因此,邏輯樹概念在 Silverlight 中將沒有用武 之地,因此本文檔不討論它。缺少邏輯樹而引發的一個很小的兼容性問題是:FrameworkElement.Parent 屬性行為在 Silverlight 版本 3 中是不同的,它實際上報告可視化樹父項。

對象樹和 XAML 標記

如果您將通過 Silverlight API 訪問的對象樹與 XAML 標記的樹形狀進行比較,它們在節點方面并不 完全匹配。這是因為 XAML 用于標記,并且在標記定義期間易于使用。例如,XAML 具有屬性元素的概念 ,它提供相關的指導信息,當您發現一個元素嵌套在另一個元素內時,您可以選擇要設置的屬性。在對象 樹中,這就像一個對象上的某個屬性由另一個對象進行設置一樣。相反,XAML 也具有內容屬性的概念, 其中,所設置的屬性在標記中甚至沒有顯式進行命名。XAML 具有的語法可以基于屬性的字符串值創建對 象,也可以針對 XAML 標記中已存在但在其他位置定義的對象提供引用,或者完全位于標記外部。盡管存 在這些很小的不一致,但當您在 XAML 中定義用戶界面時,您將在運行時定義最終 Silverlight 對象樹 的近似結構。

引用對象屬性

無論您通過何種方式從 Silverlight 對象樹中獲取對象引用,都將通過 object.property 表示法( 與 .NET 中 CLR 屬性的核心概念相關)直接公開托管 API 中的屬性。許多 Silverlight 2 屬性的基礎 是依賴項屬性概念。依賴項屬性和屬性系統引入了一些其他可能的語法,用于通過與 object.property 不同的方式訪問屬性,但與附加屬性的情況不同,這些屬性并不常用,因此本主題不討論它們。主題依賴 項屬性概述中詳細討論了依賴項屬性。

對象樹中的附加屬性

Silverlight 支持附加屬性的概念。從對象樹的角度來看,附加屬性是可以附加到樹中任何對象的屬 性,而不考慮該對象的類型(盡管在 Silverlight 實現中,該對象至少必須是依賴項對象)。附加屬性 值存在于對象樹中,但是,如果您使用代碼來訪問它們,則必須使用與 object.property 表示法不同的 語法。

對象樹中的資源和模板

Silverlight 支持一個稱為資源字典的資源概念。資源字典用于指定自身需要大量子屬性設置的屬性值。

ResourceDictionary 最常見的方案是在 XAML 中定義 ResourceDictionary 元素,然后通過 XAML 屬 性 (attribute) 和 StaticResource 標記擴展將已定義的資源用作屬性 (property) 值。對于某些情況 ,可以共享此資源。例如,您可以定義一個 LinearGradientBrush(它在 ResourceDictionary 中包含多 個漸變停止點),然后將其應用于可視化設計中的多個 Brush 屬性(可能在位于不同頁的用戶界面中) 。

模板將按稍微不同的概念運行(無論是在頁級別還是在應用程序級別資源字典中定義,也無論是在 generic.xaml 中還是以內聯方式)。模板自身是一個對象,但模板可能多次應用于可視化樹。在應用后 ,模板中的元素通常使用 TemplateBinding,這樣,就可以應用模板并仍然設置由模板化對象保留的特定 值。有關模板的基礎概念將在主題通過使用 ControlTemplate 自定義現有控件的外觀中討論。

遍歷對象樹

遍歷對象樹在對象模型中是一種通用的方法。遍歷樹意味著您可以使用針對包含對象引用子對象(通 常,這些是集合)或父關系的屬性(這通常是在集合內完成的,并返回集合自身)。我們可以對此過程進 行粗略的說明:您調用一連串子屬性和父屬性(或可能調用幫助器方法)以導航對象樹的各個軸,直到您 檢索到包含您所查找的對象的值。

通常,您應該可以在 XAML 中針對 Silverlight 構造您的內容,這樣,您就不需要大量查詢樹的結構 。為了避免需要遍歷樹,請在創建元素的 XAML 中對于 x:Name / Name 屬性向這些元素提供一個值。這 就創建了一個直接引用,該引用可用于標記從 XAML 編譯的類中,與遍歷樹相比,這種獲取對象的方法出 錯的可能性要低得多。

此外,如果您通過代碼構造函數而不通過 XAML 加載來創建對象,則您應該能夠構造您的代碼,以便 您可以定義私有字段或變量來在運行時保留對象引用(保留在類中,或在應用程序級別存儲為變量)。

然而,在某些情況下,向對象提供名稱并在范圍中保留對象引用是不可能的,也是不切實際的。一個 此類方案是:您正在添加由用戶提供或通過數據綁定提供的動態內容,而您無法預測所添加的項數或運行 時對象樹的結構。另一個方案是檢查對于某個控件所應用的模板,或控件的某個組成部分。

警告說明警告:

Silverlight 通常支持“設置外觀”概念,也稱為重新設置控件樣式或控件重新模板化。尤其是,如 果您是控件作者且正在編寫控件的支持代碼,則假定特定的樹結構可能很危險。因為大多數控件支持可設 置的模板(無論您是否已啟用多個特定的擴展點,如子部分樣式),所以,運行時可視化樹可能與通過所 應用的默認模板創建的樹不同。請參見通過使用 ControlTemplate 自定義現有控件的外觀。

用于遍歷“子項”和其他集合的 Try-catch 邏輯

如果您遍歷對象樹的要求涉及到查找某些對象,而這些對象所表示的集合未表示為可視化樹的一部分 ,則您可能需要編寫專用的函數,以便嘗試查找與特定的命名模式或特定類的對象模型相匹配的 API。

向下(遠離根)遍歷對象樹的多個級別通常是可能的,只要您了解所包含的對象將具有集合的點。您 可能必須使用 try/catch 方法或其他等效方法來檢測這一點,即檢查 Children 是否存在以及 Count 是 否為非零值(此處的 Children 和 Count 是占位符,而不是文字 API;根據 .NET 命名原則,Children 和 Count 剛好是這些類型的屬性的公共名稱,但根據對象及其對象模型,實際屬性可能具有不同的名稱 )??傮w Silverlight 對象模型中的某些集合包含在未命名為 Children 的屬性中。如果您知道您正在 遍歷到某個未命名為 Children 的特定集合屬性,則應在邏輯中說明此情況。

使用 VisualTreeHelper

VisualTreeHelper 是一個可用于遍歷對象樹的實用工具類。(可視化樹的概念已在本主題前面的“對 象樹”一節中介紹。)

因為您可以在運行時對可視化樹執行操作,并且可以遍歷到模板部件,所以這可能是一種可用來檢查 模板組成情況的有用手段。此外,您可以檢查可能通過數據綁定填充的子集合,或者您的應用程序代碼可 能無法全部了解運行時對象樹的完整本質的子集合。為此,您可以通過 GetChild 并將 GetChildrenCount 用作一個確定因素(確定樹節點是單個項還是應按計數進行迭代的“子項”集合)來 遍歷該樹。

遍歷模板內容

除VisualTreeHelper 之外,可用來遍歷模板內容的另一個方法是 GetTemplateChild。使用 GetTemplateChild 或遍歷模板內容通常是必要的,因為 FindName 的行為由名稱范圍概念控制。在這種 情況下,模板內容與對象樹的其他部分具有特意不同的名稱范圍,因為模板是共享的,如果不采用單獨的 名稱范圍,則在多次應用模板時會導致名稱沖突。GetTemplateChild 按其模板名稱范圍 x:Name 值查找 對象,同時從應用該模板的特定 Control 的更大對象樹范圍中遍歷。

Silverlight 對象和 HTML DOM

還有另一個對象模型可用于為 HTML 編寫腳本:HTML 文檔對象模型 (DOM)。然而,DOM 不會將 Silverlight 插件加載的內容標識為 DOM 的一個完整部分。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人一区二区三区电影| 欧美激情乱人伦一区| 精品亚洲男同gayvideo网站| 中文字幕国内精品| 国产精品99蜜臀久久不卡二区| 色yeye香蕉凹凸一区二区av| 91精品国产综合久久香蕉922| 国产精品九九久久久久久久| 欧美一性一乱一交一视频| 精品国偷自产在线视频99| 国产69精品久久久久久| 一区二区三区 在线观看视| 亚洲精品国产美女| zzijzzij亚洲日本成熟少妇| 欧美黄色免费网站| 欧美色播在线播放| 日韩精品视频在线观看网址| 日韩免费在线看| 国产精品午夜一区二区欲梦| 国产v综合v亚洲欧美久久| 国产精品99久久久久久人| 国产美女久久精品香蕉69| 成人黄色在线观看| 亚洲欧美国产va在线影院| 久久精品亚洲国产| 日韩在线观看av| 日韩精品视频在线观看免费| 久久久女人电视剧免费播放下载| 成人黄色免费在线观看| 亚洲aⅴ日韩av电影在线观看| 成人午夜黄色影院| 欧美超级乱淫片喷水| 国产精品女人久久久久久| 日韩欧美成人精品| 伊人久久久久久久久久| 成人国产精品日本在线| 色偷偷噜噜噜亚洲男人| 精品日韩视频在线观看| 亚洲精品福利在线观看| 国产精品视频最多的网站| 国产精品午夜一区二区欲梦| 黑人与娇小精品av专区| 另类图片亚洲另类| 亚洲电影av在线| 4444欧美成人kkkk| 亚洲欧洲黄色网| 最近2019中文免费高清视频观看www99| 伊人伊成久久人综合网站| 亚洲国产成人久久综合一区| 国产一区二区三区三区在线观看| 国产亚洲一区二区精品| 欧美性生活大片免费观看网址| 国产精品扒开腿做爽爽爽的视频| 久久亚洲综合国产精品99麻豆精品福利| 欧美激情国产日韩精品一区18| 国产精品三级网站| 亚洲成人精品久久久| www.亚洲成人| 亚洲三级av在线| 欧美高清在线视频观看不卡| 国产欧美中文字幕| 国产精品久久久久久久久久久新郎| 久久久av亚洲男天堂| 日韩精品免费综合视频在线播放| 2019中文字幕全在线观看| 成人自拍性视频| 色综合视频网站| 久久久999国产精品| 国产精品7m视频| 国产69精品久久久久9999| 全色精品综合影院| 亚洲欧美一区二区三区久久| 日韩精品中文字幕久久臀| 日韩av手机在线观看| 国产a级全部精品| 日本久久久a级免费| 国产精品视频永久免费播放| 精品国产鲁一鲁一区二区张丽| 自拍偷拍免费精品| 4k岛国日韩精品**专区| 午夜欧美不卡精品aaaaa| 亚洲天堂男人天堂| 欧美大尺度电影在线观看| 色综合影院在线| 色综合视频一区中文字幕| 日av在线播放中文不卡| 在线观看欧美成人| 国产精品久久久久国产a级| 久久久人成影片一区二区三区| 亚洲欧美日韩久久久久久| 亚洲黄色av女优在线观看| 亚洲理论在线a中文字幕| 欧洲成人午夜免费大片| 亚洲一区二区三区视频播放| 欧美日韩国产丝袜另类| 538国产精品一区二区免费视频| 久久九九有精品国产23| 欧美激情视频三区| 97久久伊人激情网| 亚洲精品福利资源站| 中文字幕不卡在线视频极品| 欧美性猛交xxxx免费看久久久| 91精品视频在线免费观看| 中文字幕日韩精品在线观看| 欧美丰满少妇xxxxx做受| 欧美日韩激情视频8区| 国产精品91久久| 欧美成人国产va精品日本一级| 成人激情在线播放| 日韩av在线电影网| 久久亚洲综合国产精品99麻豆精品福利| 亚洲国产成人精品一区二区| 欧美大片免费观看在线观看网站推荐| 国产欧美在线播放| 欧美有码在线观看| 日日骚av一区| 亚洲国产成人在线播放| 91精品国产高清自在线看超| 日韩欧亚中文在线| 在线中文字幕日韩| 精品国产美女在线| 欧美刺激性大交免费视频| 中文字幕在线精品| 亚洲自拍偷拍视频| 欧美在线视频在线播放完整版免费观看| 久久九九亚洲综合| 国内精品国产三级国产在线专| 亚洲另类xxxx| 欧美激情在线观看视频| 亚洲第一中文字幕| 日韩av不卡在线| 亚洲男人天堂2024| 热re99久久精品国产66热| 精品视频在线播放色网色视频| 中国日韩欧美久久久久久久久| 欧美日韩一区二区在线播放| 日韩在线中文字幕| 国产热re99久久6国产精品| 欧美在线中文字幕| 亚洲欧美中文日韩v在线观看| 日韩中文av在线| 亚洲一区二区三区香蕉| 国产91精品在线播放| 最新国产精品拍自在线播放| 国产精品欧美亚洲777777| 久久天天躁狠狠躁夜夜躁2014| 精品电影在线观看| 美女国内精品自产拍在线播放| 亚洲视频网站在线观看| 深夜福利一区二区| 国产精品永久在线| 欧美美女15p| 亚洲无限乱码一二三四麻| 欧美色xxxx| 国产成人综合亚洲| 国产美女直播视频一区| 亚洲欧美日本精品| 国产综合在线视频| 国产精品都在这里| 欧美激情一区二区久久久| 亚洲性生活视频在线观看| 伊人久久久久久久久久| 91黑丝在线观看| 精品网站999www|