愚公系列2021年11月 面試題 WPF

      網友投稿 875 2022-05-29

      入門篇[2]

      入門篇[2]

      1. 談談什么是WPF?

      2. 說說WPF中的XAML是什么?為什么需要它?它只存在于WPF嗎?

      WPF初級篇[13]

      3.簡單描述下WPF的樣式

      4.WPF 中的資源是什么?

      5.WPF中的Visibility.Collapsed和Visibility.Hidden有什么區別?

      6.什么是靜態資源和動態資源?

      7.WPF中控件的分類?

      8.WPF中的命令設計模式是什么

      9.XML和XAML有什么區別?

      10.WPF中的xmlns 和xmlns:x有什么區別?

      11.相對于Winform,WPF有什么優勢?

      12.什么是WPF的值轉換器?

      13.XAML 文件中的 xmlns 是什么?

      14.我們什么時候應該使用“x:name”和“name”?

      WPF中級篇[17]

      15.描述下WPF對象完整的層次結構?

      16.描述下WPF的總體架構?

      17.Style 和 ControlTemplate的主要區別是什么?

      18.WPF 是建立在 Windows 窗體之上的還是完全不同的?

      19.如何理解MVVM中的 View 和 ViewModel?

      20.如何在WPF應用程序中全局捕獲異常?

      21.WPF中的x:Name和Name屬性之間有什么區別?

      22.ListBox 與 ListView - 如何選擇以及何時進行數據綁定?

      23.說出使用WPF而不是Windows窗體的一些優點

      24.WPF中的命令設計模式和ICommand是什么?

      25.什么是可凍結對象?

      26.什么是MVVM?

      27.WPF中可視化樹和邏輯樹的區別是什么?

      28.在WPF應用程序集中添加新文件時,Page和Window有什么區別?

      29.WPF中的樣式和資源有什么區別?

      30.WPF中Dispatcher對象的用途是什么?

      31.WPF中StaticResource和DynamicResource之間有什么區別?

      WPF高級篇[8]

      32.解釋SelectedItem、SelectedValue和SelectedValuePath之間的區別?

      33.WPF 中的 ControlTemplate 和 DataTemplate 有什么區別?

      34.Freezable.Clone() 和 Freezable.CloneCurrentValue() 方法有什么區別?

      35.ObservableCollection 和 BindingList 有什么區別?

      36.冒泡事件和隧道事件之間的確切區別是什么?

      37.Threads 和 Dispatchers 是什么關系?

      38.ContentControl 和 ContentPresenter 之間有什么區別?

      39.為什么需要依賴屬性?

      1. 談談什么是WPF?

      WPF 是微軟推出的表現層UI開發框架,全稱 Windows Presentation Foundation。 相對Winform來講,它使用一種全新的桌面應用程序 UI 的開發方式。 除了像Winform那樣在“Windows 窗體”上刪除控件之外,WPF 還為應用程序開發提供了額外的功能改善,包括豐富的用戶界面、動畫等等。

      簡而言之,可以使用 WPF 完成以下操作:

      繪制普通控件和圖形。

      輕松加載/播放音頻和視頻文件。

      提供平滑的圖形效果,例如陰影和顏色漸變。

      使用可跨相同控件使用的共享樣式,以提供相同的主題、皮膚和設計。

      變換對象,包括形狀、控件和視頻。

      可以創建和動畫 3D 圖形。

      可以輕松繪制可縮放的矢量圖形而不會出現鋸齒狀鋸齒。

      2. 說說WPF中的XAML是什么?為什么需要它?它只存在于WPF嗎?

      XAML 是用來組織 WPF UI 的 XML 文件。 以XML標簽方式表示UI的重點是編寫一次可以在其他地方運行它,比如Blend軟件也能正常加載與編輯。

      XAML 不僅僅適用于 WPF。 XAML 是一種基于 XML 的語言,它有多種變體。

      WPF初級篇[13]

      3.簡單描述下WPF的樣式

      WPF 樣式的工作方式與 CSS 樣式類似

      在 CSS 中,我們為控件定義樣式,并在應用程序中任何需要的地方重用相同的樣式

      與 WPF 中的樣式允許定義屬性并可在應用程序中重用的方式相同。

      4.WPF 中的資源是什么?

      資源提供了一種簡單的方法來重用已定義的對象和值。 WPF 中的資源允許一次設置多個控件的屬性。 例如,可以使用單個資源在 WPF 應用程序中的多個元素上設置背景屬性。

      定義資源的最佳方式是在 Window 或 Page 元素級別。 為元素定義的任何資源也適用于該元素的子元素。

      5.WPF中的Visibility.Collapsed和Visibility.Hidden有什么區別?

      Visibility.Hidden 隱藏控件,但保留它在布局中占用的空間。 所以它呈現空白而不是控件。

      Visibilty.Collapsed 不呈現控件并且不保留空格。 控件占用的空間是“折疊的”

      6.什么是靜態資源和動態資源?

      Static Resource - StaticResource 的值在加載時確定

      Dynamic Resource - 在運行時更改屬性值的情況下使用。

      7.WPF中控件的分類?

      WPF控件可以分為四類:

      Control: - 大部分時間使用的基本控件。 例如文本框、按鈕等。像按鈕、文本框、標簽等獨立控件的控件被稱為內容控件。 還有其他控件可以容納其他控件,例如 itemscontrols。 Itemscontrol 可以有多個文本框控件、標簽控件等。

      Shape: - 幫助我們創建簡單的圖形控件,如橢圓、線條、矩形等。

      Panel: - 有助于對齊和定位控件。 例如,grid 幫助我們以表格方式對齊,stack panel 有助于水平和垂直對齊。

      Content presenter: - 用于將任何 XAML 內容放入其中。

      8.WPF中的命令設計模式是什么

      命令設計模式是面向對象設計模式中最強大的設計模式之一。 此模式允許將操作請求與實際執行操作的對象分離,換句話說,命令模式將操作表示為對象。 Command 對象不包含要執行的功能。 這消除了命令定義和功能之間的直接聯系,并促進了松散耦合。 當需要根據用戶請求實現操作時,命令模式是處理對象的最佳模式。

      命令設計模式的成員包括: Client、調用者、命令、具體執行內容、接收者

      9.XML和XAML有什么區別?

      以下是 XML 和 XAML 之間的區別:

      所有 XAML 文檔都可以稱之為 XML 文檔。 然而,反過來說卻是不能的。

      XAML 是一種聲明性應用程序語言,而 XML 是一種標記語言。

      XML 主要用于 Web 應用程序。 相比之下,XAML 用于設計 Windows 和其他 Web 應用程序的控件。

      XAML 側重于對象屬性、定義以及它們之間的關系。

      XML 是 W3C 產生的一種標記語言,用于描述其他標記語言。

      10.WPF中的xmlns 和xmlns:x有什么區別?

      這兩個命名空間都有助于定義/解析 XAML UI 元素。

      第一個命名空間是默認命名空間,有助于解析整體 WPF 元素。

      第二個命名空間以“x:”為前綴,有助于解析 XAML 語言定義。

      例如,對于下面的 XAML 片段,我們有兩個東西,一個是“StackPanel”,另一個是“x:name”。 “StackPanel”由默認命名空間解析,“x:name”由“xmlns:x”命名空間解析。

      11.相對于Winform,WPF有什么優勢?

      1 - 綁定(更簡約的編碼)

      2 - 靈活的外觀和感受(資源和樣式)

      3 - 聲明式編程 (XAML)

      4 - 表現層混合動畫(動畫開發簡單)

      5 - 快速加載(硬件加速)

      6- 圖形硬件無關(分辨率無關)

      12.什么是WPF的值轉換器?

      值轉換器充當目標和源之間的橋梁,當目標與一個源綁定數據類型不一致時,需要值轉換器來做中轉。

      例如有一個文本框和一個按鈕控件, 當文本框的文本被填充或為空時,希望啟用或禁用按鈕控件。

      在這種情況下,需要將字符串數據轉換為布爾值。這可以使用值轉換器實現。

      要實現值轉換器,需要繼承System.Windows.Data命名空間中的IValueConverter,并實現兩個方法Convert和ConvertBack。

      13.XAML 文件中的 xmlns 是什么?

      “xmlns”代表 XML 命名空間。 它幫助我們避免 XML 文檔中的名稱沖突和混淆。

      14.我們什么時候應該使用“x:name”和“name”?

      “x:name”和“name”沒有區別,“name”是“x:name”的簡寫。 但是當對象無法使用“name”屬性時,就需要使用“x:name”屬性。

      WPF中級篇[17]

      15.描述下WPF對象完整的層次結構?

      Object: 由于 WPF 是使用 .NET 創建的,因此 WPF UI 類繼承的第一個類是 .NET 對象類。

      Dispatcher: 一個抽象基類,用于綁定到一個線程上的類。與Windows窗體類似,WPF也要求僅從創建線程中調用方法和屬性。WPF應用程序使用為人熟知的單線程親和(Single-Thread Affinity,STA)模型,這意味著整個用戶界面由單個線程擁有。從另一個線程與用戶界面進行交互是不安全的。通過繼承自DispathcerObject類,用戶界面中的每個元素都可以檢查代碼是否在正確的線程上運行,并能通過訪問調度程序為用戶界面線程封送代碼。

      Dependency: 所有支持依賴屬性的類的基類。依賴屬性可以依賴其他輸入,例如主題和用戶喜好。依賴屬性與數據綁定,動畫,資源和樣式一起使用。

      Visual: 所有可見元素的基類都是Visual。這個類包含點擊測試和轉換等特性

      【愚公系列】2021年11月 面試題 WPF

      UI Element: 所有需要基本顯示功能的WPF元素的抽象基類是UIElement。這個類提供了鼠標移動,拖放,按鍵的通道和起泡事件;提供了可以由派生類重寫的虛顯示方法;以及布局方法。WPF不再使用Window句柄,這個類就可以用Window句柄

      FrameworkElement: FrameworkElement派生自基類UIElement,實現了由基類定義的方法的默認代碼

      最后,所有 WPF 控件 textbox 、 button 、 grids 以及可以從 WPF 工具箱中想到的任何內容都繼承自FrameworkElement類。

      16.描述下WPF的總體架構?

      User32: 決定了哪個控件顯示在屏幕上的哪個位置。

      DirectX: WPF內部使用DirectX 與驅動程序對話并渲染呈現內容。

      Milcore: 媒體集成庫。 此部分是非托管代碼,因為它充當 WPF 托管和 DirectX/User32 非托管 API 之間的橋梁。

      Presentation core : WPF 公開的低級 API,提供 2D 、 3D 、幾何等功能。

      **Presentation framework: **此部分具有高級功能,如應用程序控件、布局。 幫助您構建應用程序的內容等。

      17.Style 和 ControlTemplate的主要區別是什么?

      樣式在控件上設置屬性。

      ControlTemplate 是大多數控件的屬性,用于指定它們的呈現方式。

      詳細地說,可以使用一種樣式對一組屬性的設置進行分組,以便重新使用它來標準化已有控件。 樣式可以在控件上顯式設置,也可以應用于所有特定類型。

      控件模板可以通過樣式設置或在控件上顯式設置以更改其顯示方式。 所有控件都有嵌入在 .net wpf 程序集中的默認模板(和樣式)。

      18.WPF 是建立在 Windows 窗體之上的還是完全不同的?

      這兩個是完全不同的技術。 它們確實為兩個方向提供了一些互操作性層,但除此之外沒有任何共同之處。 Windows 窗體或多或少是 Win32/MFC 之上的輕量級包裝器,這意味著它在 .NET 中的可擴展性并非在所有情況下都那么好。 WPF 是一個從頭開始實現的新 UI 框架。 在自定義現有類型時,WPF 也更加靈活。

      WPF 更適合創建“華麗”的 GUI。 只是它需要比 WinForms 更新的 .net 框架,并且需要兼容 dx9 或更高的 GPU。

      WinForms 仍然是一項強大的技術,通常可以以比 WPF 更快的速度開發,但是,最終,這兩種技術都可以用來實現相同的目標。 WinForms 通常用于開發業務應用程序,而 WPF 通常用于創建更多基于最終用戶的軟件、應用程序等。

      19.如何理解MVVM中的 View 和 ViewModel?

      View是客戶端界面、輸入輸出界面或用戶界面。 收集了窗口、導航頁面、用戶控件、資源文件、樣式和主題、自定義工具和控件的所有用戶界面元素。

      View不知道 ViewModel 和 Model,反之亦然,ViewModel 和 Model 不知道 View ,并且控件是完全分離的。

      但是ViewModel知道View的需求。 它們通過數據綁定和依賴屬性或多個屬性進行通信。

      ViewModel 是一個非可視類。 MVVM 設計模式不派生自任何基于 WPF 的類。 ViewModel 不直接知道View。 View 和 ViewModel 之間的通信是通過一些屬性和綁定進行的。

      一個 View-Model 可以連接到多個模型,像一對多關系一樣工作,并為 View 封裝業務邏輯和數據。

      20.如何在WPF應用程序中全局捕獲異常?

      使用“Application.DispatcherUnhandledException”事件。

      請注意,仍有一些異常會導致應用程序崩潰,例如在嘗試保存到數據庫時出現堆棧溢出、內存耗盡或網絡連接丟失等情況。

      21.WPF中的x:Name和Name屬性之間有什么區別?

      它們不是同一件事。

      x:Name是一個 xaml 概念,主要用于引用元素。當您為元素提供 x:Name xaml 屬性時,“指定的 x:Name 將成為處理 xaml 時在底層代碼中創建的字段的名稱,并且該字段保存對對象的引用。”[MSDN],所以,它是一個設計時生成的字段,默認情況下具有內部訪問權限。

      Name 是 FrameworkElement對象的現有字符串類型的屬性, 以其他WPF元素中都包含此屬性.

      因此,這也意味著 x:Name 可以用于更廣泛的對象。 這是一種使 xaml 中的任何內容都能夠被給定名稱引用的技術。

      22.ListBox 與 ListView - 如何選擇以及何時進行數據綁定?

      ListView 是一個專門的 ListBox(繼承自 ListBox)。 ListView允許指定不同的視圖而不是直接列表。 可以滾動自己的視圖,也可以使用 GridView(想想類似資源管理器的“詳細信息視圖”)。 它基本上是多列列表框,跟 windows 窗體列表視圖的表現類似。

      如果不需要 ListView 的附加功能,只是顯示項目列表(即使模板很復雜),使用 ListBox就足夠了。

      23.說出使用WPF而不是Windows窗體的一些優點

      使用 WPF 代替 Windows 窗體的優點:

      XAML 使更容易的創建和編輯 GUI,并允許在設計模式 (XAML) 和后臺代碼(C#、VB.NET 等)之間拆分工作。

      數據綁定,使開發項目可以更清晰地分離數據和布局。

      使用硬件加速來繪制 GUI,以獲得更好的性能。

      24.WPF中的命令設計模式和ICommand是什么?

      ICommand 是 MVVM 的核心組件。 ICommand 在 MVVM 中經常使用,它提供了View和ViewModel(用戶界面和業務邏輯)之間的分離邏輯。 XAML 提供了一種通過 ICommand 更好地綁定 GUI 事件的方法。 ICommand 要求用戶定義兩個方法,bool CanExecute 和 void Execute。 CanExecute 方法只是告訴用戶,我可以執行這個 Action 嗎? 這對于控制 GUI 元素的可操作性非常有用。

      ICommand 非常簡單,但是也可以完在更加有趣和復雜的功能。 ICommand 將用戶界面集成到業務邏輯中,或者在視圖與視圖模型之間進行直接通信。 它還為視圖提供了更新模型/視圖模型的機制。

      25.什么是可凍結對象?

      Freezable 是一種特殊類型的對象,具有兩種狀態:unfrozen 和 frozen。 解凍時,Freezable 的行為與任何其他對象一樣。 凍結后,無法再修改 Freezable。

      Freezable 提供了一個 changed 事件來通知觀察者對對象的任何修改。 凍結 Freezable 可以提高其性能,因為它不再需要在更改通知上花費資源。 凍結的 Freezable 也可以跨線程共享,而未凍結的 Freezable 則不能。

      盡管 Freezable 類有許多應用程序,但 WPF中的大多數 Freezable 對象都與圖形子系統相關。

      26.什么是MVVM?

      MVVM(Model View ViewModel)是一個在WPF中制作應用的框架。 MVVM 與 MVC 框架相同。 它是一個三層架構,我們可以使用 MVVM 進行松耦合開發。

      MVVM 由 John Gossman 于 2005 年推出,當時專門用于 WPF,作為 Martin Fowler 更廣泛的演示模型模式的具體應用。 基于 MVVM 模式的應用程序的實現使用各種平臺功能,這些功能以某種形式可用于 WPF、Xarmarin 移動端、Web和 Windows。 許多商業應用程序,包括 Microsoft Expression 產品,都是在 MVVM 之后構建的。

      MVVM 的優勢

      模塊化

      測試驅動開發

      分離 UI 和業務層作為視圖和視圖模型。

      Page和Window之間的代碼共享。

      易于維護。

      MVVM 的特性列表

      它分離了業務層和表示層,如 MVP 和 MVC

      改進關注點的結構/分離(視圖、視圖模型和模型)。

      實現更好的設計/開發人員工作流程。

      增強簡單性和可測試性。

      通過XAML支持強大數據綁定功能

      無需使用代碼隱藏文件

      提供多環境的應用開發能力。

      強大的數據綁定、命令、驗證等等。

      設計者和開發者可以一起工作。

      27.WPF中可視化樹和邏輯樹的區別是什么?

      WPF 用戶界面的元素是分層相關的。 這種關系稱為邏輯樹。 一個元素的模板由多個視覺元素組成。 這棵樹被稱為 VisualTree。

      邏輯樹 描述了用戶界面元素之間的關系。 邏輯樹負責:

      繼承 DependencyProperty 值

      解析 DynamicResources 引用

      查找綁定的元素名稱

      轉發路由事件

      視覺樹包含所有邏輯元素,包括每個元素模板的所有視覺元素。 視覺樹負責:

      渲染視覺元素

      傳播元素不透明度

      傳播布局和渲染變換

      傳播 IsEnabled 屬性。

      進行命中測試

      相對來源 (FindAncestor)

      28.在WPF應用程序集中添加新文件時,Page和Window有什么區別?

      頁面旨在用于導航應用程序(通常帶有后退和前進按鈕,例如瀏覽器)。 頁面必須托管在 NavigationWindow 或 Frame 中。

      Windows 只是普通的 WPF 應用程序 Windows,但可以通過 Frame 容器托管頁面。

      29.WPF中的樣式和資源有什么區別?

      資源用于針對多種類型的控件的屬性,而樣式一次只能為一種類型的控件定義屬性。 我們還可以將不同的樣式定義為一種公共資源的一部分。

      這是一個開放式問題。 參考你的經驗來提供相關的答案。

      30.WPF中Dispatcher對象的用途是什么?

      幾乎每個 WPF 元素都具有線程關聯性。 這意味著只能從創建該元素的線程訪問此類元素。 為此,每個需要線程關聯的元素最終都是從 DispatcherObject 類派生的。 此類提供名為 Dispatcher 的屬性,該屬性返回與 WPF 元素關聯的 Dispatcher 對象。

      Dispatcher 類用于在他的附加線程上執行工作。 它有一個工作項隊列,負責在調度程序線程上執行工作項。

      31.WPF中StaticResource和DynamicResource之間有什么區別?

      在實際運行應用程序之前加載 XAML 期間,將解析 StaticResource 并將其分配給屬性。 它只會被分配一次,并且忽略對資源字典的任何更改。

      DynamicResource 在加載期間將一個 Expression 對象分配給該屬性,但直到運行時當 Expression 對象被要求提供值時才實際查找資源。 這會導致直到在運動時需要它時才查找資源。 一個很好的例子是對稍后在 XAML 中定義的資源的前向引用。 另一個例子是直到運行時才會存在的資源。 如果源資源字典發生更改,它將更新目標。

      WPF高級篇[8]

      32.解釋SelectedItem、SelectedValue和SelectedValuePath之間的區別?

      SelectedItem 屬性返回您的列表綁定到的整個對象。 因此,假設您已將一個列表綁定到一組 Category 對象(每個 Category 對象都具有 Name 和 ID 屬性)。 例如。 ObservableCollection。 SelectedItem 屬性將返回當前選擇的 Category 對象。 然而,出于綁定目的,也可能有另一種情況,并不想得到整個 Category 對象綁定到列表綁定到結果,而是該 Category 對象上的單個屬性的值(例如它的 ID 屬性)。

      因此,我們將 SelectedValuePath 屬性和 SelectedValue 屬性作為另一種綁定方式(將它們相互結合使用)。 假設您有一個 Product 對象,您的視圖綁定到該對象(具有 ProductName、Weight 等屬性)。假設在該 Product 對象上有一個 CategoryID 屬性,并且希望用戶能夠從類別列表中為產品選擇一個類別。 需要將 Category 對象的 ID 屬性分配給 Product 對象的 CategoryID 屬性。這就是“SelectedValuePath”和“SelectedValue”屬性的用武之地。 使用SelectedValuePath='ID' 將 Category 對象上的 ID 屬性分配給列表綁定到的 Product 對象上的屬性,然后將 SelectedValue 屬性綁定到 DataContext 上的屬性( 即產品)。

      下面的示例演示了這一點。 有一個 ComboBox 綁定到一個類別列表(通過 ItemsSource)。 將產品上的 CategoryID 屬性綁定為選定值(使用 SelectedValue 屬性)。 通過 SelectedValuePath 屬性將此與類別的 ID 屬性相關聯。 并且只在 ComboBox 中顯示 Name 屬性和 DisplayMemberPath 屬性)。

      33.WPF 中的 ControlTemplate 和 DataTemplate 有什么區別?

      通常,控件是為了它自己而呈現的,并不反映底層數據。 例如,一個Button 不會綁定到一個業務對象——它在那里純粹是為了可以點擊它。 但是,通常會出現“ContentControl”或“ListBox”,以便它們可以為用戶呈現數據。

      因此,“DataTemplate”用于為底層數據提供可視化結構,而“ControlTemplate”與底層數據無關,只是為控件本身提供可視化布局。

      “ControlTemplate”通常只包含“TemplateBinding”表達式,綁定回控件本身的屬性,而“DataTemplate”將包含標準綁定表達式,綁定到其“DataContext”的屬性(業務/域對象或 查看模型)。

      34.Freezable.Clone() 和 Freezable.CloneCurrentValue() 方法有什么區別?

      Clone 實際上復制綁定表達式。 因此,如果對象的一個屬性被綁定,它在副本中仍然是綁定的。

      另一方面,CloneCurrentValues 只復制當前值,顧名思義。 不會保留綁定,因此如果修改了綁定的源,則不會更新副本中的值。

      35.ObservableCollection 和 BindingList 有什么區別?

      實際的區別在于BindingList 用于WinForms,而ObservableCollection 用于WPF。 從 WPF 的角度來看,BindingList 沒有得到正確支持,除非真的必須,否則您永遠不會在 WPF 項目中真正使用它。

      36.冒泡事件和隧道事件之間的確切區別是什么?

      WPF 為我們提供了許多不同的事件處理機制——它們是冒泡、隧道和直接。 這些都稱為路由事件。

      Direct event - 最符合直觀感受的就是直接路由事件了。 這是項目本身處理發生的事件的地方。 一個很好的例子是在標準 WinForms 中處理鼠標按鈕的 onClick 事件。 這是在 GUI 項中引發事件并由所述 GUI 元素處理的地方。

      Bubbling Event - 當事件沒有被元素處理(比如文本框)并且事件“冒泡”到包含它的 UI 容器時,就會發生冒泡。 例如,假設有一個包含面板的窗口,在該面板內有一個Grid,在Grid內有一個TextBox。 如果TextBox未處理該事件,則它會移動、傳遞或“冒泡”到Grid上(因為Grid包含TextBox),如果未在該級別處理,則事件會進一步向上冒泡“ 樹”(稱為可視化樹)到面板,在那里它可能會或可能不會被處理。 這個過程一直持續到它被處理或事件跳出最頂層的元素。

      Tunneling - 隧道與冒泡相反。 事件不是沿著可視化樹“向上”移動,而是沿著可視化樹向下傳播到被視為源的元素。 隧道事件的標準 WPF 命名定義是它們都以“Preview”開頭,例如 previewdownkey 和 previewmousebuttondown。 可以在它們到達“目標”元素的途中捕獲它們并進行處理。

      37.Threads 和 Dispatchers 是什么關系?

      WPF 應用程序只有一個 UI 線程來處理所有 UI 交互和用戶輸入。 還有一個“隱藏”線程負責渲染,但通常開發人員不會處理它。

      Dispatcher / Thread 關系是一對一的,即一個 Dispatcher 總是與一個線程相關聯,可用于將執行分派到該線程。 Dispatcher.CurrentDispatcher 返回當前線程的調度程序,也就是說,當在工作線程上調用 Dispatcher.CurrentDispatcher 時,將獲得該工作線程的調度程序。

      Dispatchers 是按需創建的,這意味著如果訪問 Dispatcher.CurrentDispatcher 并且沒有與當前線程關聯的調度程序,則會創建一個。

      應用程序中的調度程序數量始終小于或等于應用程序中的線程數量。

      38.ContentControl 和 ContentPresenter 之間有什么區別?

      ContentControl 是包含其他元素并具有 Content 屬性(例如,Button)的控件的基類。

      ContentPresenter 用于在控件模板中顯示內容。

      ContentControl,可以直接使用(它應該用作基類),而 ContentPresenter 用來顯示其控件模板中的內容部分。

      個人經驗(并非適用于所有情況,請自行判斷):

      在 ControlTemplate 中使用 ContentPresenter

      在 ControlTemplate 之外(包括 DataTemplate 和外部模板)盡量不要使用它們中的任何一個,如果必須使用,可以 ContentPresenter 優先

      如果需要創建一個承載內容的自定義“無外觀”控件,并且無法通過更改現有控件的模板(這應該是非常罕見的)獲得相同的結果,則可以將 ContentControl 子類化。

      39.為什么需要依賴屬性?

      主要區別在于,普通 .NET 屬性的值是直接從類中的私有成員 讀取,而 DependencyProperty 的值在調用 GetValue( ) 從 DependencyObject 繼承的方法。

      當設置依賴屬性的值時,它不會存儲在對象的字段中,而是存儲在基類 DependencyObject 提供的鍵和值字典中。 條目的鍵是屬性的名稱,值是您要設置的值。

      依賴屬性的優點如下:

      減少內存占用

      當 UI 控件的 90% 以上的屬性通常保持其初始值時,為每個屬性存儲一個字段是一種巨大的消耗。 依賴屬性通過僅在實例中存儲修改的屬性來解決這些問題。 默認值在依賴屬性中存儲一次。

      值繼承

      當訪問依賴項屬性時,將使用值解析策略來解析該值。 如果沒有設置本地值,則依賴屬性會向上導航邏輯樹,直到找到一個值。 當您在根元素上設置 FontSize 時,它適用于下面的所有文本塊,除非在元素中覆蓋該屬性值。

      更改通知

      依賴屬性具有內置的更改通知機制。 通過在屬性元數據中注冊回調,您會在屬性值更改時收到通知。 這在數據綁定中會使用到。

      WPF

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Python辦公自動化——批量合并word文件
      下一篇:如何通過示例代碼在 C++ 中使用智能指針
      相關文章
      在线精品亚洲一区二区小说| 亚洲导航深夜福利| 亚洲日韩乱码中文无码蜜桃| 亚洲熟女少妇一区二区| 久久久久久亚洲av无码蜜芽| 亚洲精品美女久久7777777| 亚洲乱码日产精品BD在线观看| 亚洲精品在线观看视频| 国产亚洲精品a在线无码| 久久九九亚洲精品| 亚洲精品狼友在线播放| 国产亚洲精品一品区99热| 日韩亚洲一区二区三区| 亚洲AV无码精品无码麻豆| 九月丁香婷婷亚洲综合色| 久久综合图区亚洲综合图区| 亚洲av永久无码精品秋霞电影影院 | 91亚洲国产成人久久精品网址| 91精品国产亚洲爽啪在线观看| 亚洲视频小说图片| 亚洲日韩国产精品无码av| 亚洲午夜电影在线观看| 久久亚洲精品国产亚洲老地址| 亚洲人av高清无码| yy6080亚洲一级理论| 亚洲精品国产V片在线观看| 久久久久国产亚洲AV麻豆| 国产亚洲精品资在线| 国产亚洲人成网站观看| 亚洲精品福利视频| 亚洲国产夜色在线观看| 亚洲色欲色欲www在线播放| 亚洲AV噜噜一区二区三区 | 亚洲精品日韩一区二区小说| 国产精品亚洲AV三区| 亚洲中文字幕无码专区| 亚洲成AV人片天堂网无码| 青青草原精品国产亚洲av| 亚洲国语在线视频手机在线| 亚洲色大成网站www尤物| 亚洲av无码国产精品色在线看不卡|