WPF模板

来源:http://www.cnblogs.com/guofeiji/archive/2016/05/28/5538081.html
-Advertisement-
Play Games

WPF的中模板有三種:ControlTemplate、ItemsPanelTemplate、DataTemplate,他們繼承抽象類FrameworkTemplate,下麵是它們的繼承關係: Windows Presentation Foundation (WPF) 中的控制項具有 ControlTe... ...


WPF的中模板有三種:ControlTemplate、ItemsPanelTemplate、DataTemplate,他們繼承抽象類FrameworkTemplate,下麵是它們的繼承關係:

QQ截圖20160528175829

Windows Presentation Foundation (WPF) 中的控制項具有 ControlTemplate,它包含該控制項的可視化樹,當在模板中查找指定控制項時,會用到可視化樹。 可以通過修改某個控制項的 ControlTemplate 來更改該控制項的結構和外觀 不能僅替換控制項的可視化樹的一部分;若要更改控制項的可視化樹,必須將該控制項的 Template 屬性設置為新的完整 ControlTemplate

通常使用 ContentControlControlTemplate 中的 ContentPresenter 來指定要將內容添加到的位置。 每種 ContentControl 類型都在其預設 ControlTemplate 內有一個 ContentPresenter。

當 ContentPresenter 對象位於 ContentControlControlTemplate 中時, ContentContentTemplateContentTemplateSelector 屬性會從 ContentControl同名屬性獲取其值。 通過設置 ContentSource 屬性或綁定到模板化父級的其他屬性,可以使 ContentPresenter 屬性獲得這些屬性的值。通過下麵例子理解

<Style TargetType="HeaderedContentControl">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type HeaderedContentControl}">
                        <StackPanel>
                            <Grid>
                                <Rectangle Stroke="{TemplateBinding Background}"/>
                                <ContentPresenter  ContentSource="Header"/>
                            </Grid>
                            <Grid>
                                <Rectangle Fill="{TemplateBinding Background}"/>
                                <ContentPresenter  ContentSource="Content"/>
                            </Grid>
                        </StackPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

HeaderedContentControl 應用了上面的樣式,在樣式中,通過設置ContentSource="Header"ContentPresenter 的Content屬性與HeaderedContentControl 控制項的Header的屬性顯示一致,如果樣式中去掉這一設置,則會獲取同名屬性的值,即HeaderedContentControl 的Content

<HeaderedContentControl Name="hcontCtrl" Background="Beige" 
                        Header="This is the header."
                 Content="This is the content."/>

使用 DataTemplate 可以定義數據的可視表示形式。

ControlTemplate中使用ContentPresenter時,可以設置ContentPresenter的ContentTemplate屬性,該屬性是DataTemplate類型,可以控制內容的呈現方式。ControlTemplate中可能不止一個ContentPresenter,如GroupBox有兩個ContentPresenter,分別用於展示標題和內容。不必在ControlTemplate中修改ContentPresenter的DataTemplate,控制項直接將DataTemplate類型的屬性公開給用戶,用戶可以直接為該屬性設置一個新模板,如可以直接設置GroupBox的HeaderTemplate和ContentTemplate分別控制標題和內容面板中的數據展示方式。

DataTemplate類型的對象在不同的控制項叫法不一,在Button中稱為ContentTemplate,在ListBox中稱為ItemTemplate,而在GroupBox中稱為HeaderTemplate和ContentTemplate。其實,是通過控制項間接引用了相應ContentPresenter中的ControlTemplate

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .gz 由gzip壓縮工具壓縮的文件 .bz2 由bzip2壓縮工具壓縮的文件 .tar 由tar打包程式打包的文件 .tar.gz 先由tar打包,gzip壓縮 .tar.bz2 先由tar打包,bzip2壓縮 1:gzip 壓縮文件 此命令不能壓縮目錄 gzip +文件 在當前位置壓縮該文件 g ...
  • 手動安裝交叉編譯工具鏈: 第一步:準備事先下載好的安裝包 :arm-2009q3.tar.br2(下載地址:https://yunpan.cn/OcSEWQvsjFgntk 訪問密碼 311e)將安裝包放到虛擬機的共用文件夾下 在linux中,用戶自己裝程式一般裝在/usr/local 下 /bin ...
  • 這是第一次在博客園中寫自己的隨筆,也是第一次使用Markdown的編輯環境,值得紀念一下!希望在以後學習linux的道路上能多多記錄自己的學習心得和遇到問題的解決方法,朝著運維的方向邁出堅實的腳步。 問題描述 最近在編譯一個開源軟體時,在好不容易配置好各種編譯環境之後,由於各種許可權問題還是無法正常進 ...
  • 這是 WIN32 自動創建多級子目錄的 C++ 封裝類,用法簡單。 封裝沒有採用類的靜態函數方式,而是在構造函數裡面直接完成工作。沒什麼具體的原因,只是當時做成這樣了,這麼多年就一直這樣用了。 #ifndef lxx_hss_auto_create_folder_hss #define __HSS_... ...
  • http://code.csdn.net/news/2820879 想出一個難破解且容易記的密碼對不是一件簡單的事情。在我為電腦設定一個新密碼,或者線上註冊了一個新的賬號,需要輸入密碼的時候,腦袋就一片空白。不過,Linux下有幾個密碼生成工具可以使用,每一個工具都有自己的辦法生成安全的密碼。 1. ...
  • 最近用到了rsync的非同步非同備份,一個簡單的rsync同步配置,總結起來有以下幾個步驟: 1)服務端配置:vim /etc/rsyncd.conf 進入編輯,加入如下配置: 2) 創建所需要備份的目錄,添加上面配置的虛擬用戶:useradd wlpt -s /sbin/nologin. 3) 修改 ...
  • Hello, Android Android 開發與 Xamarin 簡介 在這兩節指南中,我們將 (使用 Xamarin Studio或 Visual Studio)建立我們的第一個 Xamarin.Android 應用程式 並理解使用Xamarin 開發Android 應用程式的基本原理的。在這 ...
  • 最近我一直在編寫適用於Windows 10商店的游戲.這款游戲比較怕玩家用修改器改金錢,因為這種修改會導致某些內購失效並且損害公平性。於是我把自己見過的三種反修改器的方法給網友們介紹一下。 首先說明一下我總結的防止游戲作弊的理念: 1.預防修改,防患於未然,讓可用的修改手段減少。 比如說,你讓你的U ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...