自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談WPF本質(zhì)中的數(shù)據(jù)和行為

開發(fā) 后端
本文將談到的是WPF本質(zhì)中的數(shù)據(jù)和行為,其中我們也會談到UI框架,并從總體上講解一下WPF如何處理和操作Data。

WPF縮寫為Windows Presentation Foundation的縮寫,本文所要談的就是WPF本質(zhì)中的數(shù)據(jù)和行為,希望通過本文能對大家了解WPF本質(zhì)有所幫助。

如果自己來做一個UI框架,我們會首先關(guān)注哪些方面?我想UI框架主要處理的一定包括兩個主要層次的內(nèi)容,一個是數(shù)據(jù)展現(xiàn),另一個就是數(shù)據(jù)操作,所以UI框架必須能夠接收各種不同的數(shù)據(jù)并通過UI界面展現(xiàn)出來,然后可以通過控件行為來操作這些數(shù)據(jù),也就是UI框架的數(shù)據(jù)(Data)和行為(Behavior)。

#T#

本篇從總體上講解一下WPF如何處理和操作Data,看完之后大家應(yīng)該對WPF框架如何把數(shù)據(jù)轉(zhuǎn)變?yōu)檎宫F(xiàn)界面有初步的認識,這也是WPF本質(zhì)的核心設(shè)計之一。

數(shù)據(jù)(Data)

以前的UI框架的控件對控件數(shù)據(jù)類型都有規(guī)定,按鈕上顯示的是文本或者加上一個圖片,下拉框顯示的都是字符串或者帶上一個object類型屬性的作為保存對象引用用。而WPF則不同,它缺省的數(shù)據(jù)類型為object,這就允許控件能夠操作任意類型的數(shù)據(jù),這也是它靈活和強大的地方之一。

數(shù)據(jù)類型

原始數(shù)據(jù):字符串、布爾、整形等

列表數(shù)據(jù):數(shù)組、列表等,集合中的內(nèi)容可以是相同類型或者不同類型的數(shù)據(jù)

層級數(shù)據(jù):樹、列表的列表或者圖等,具有層級關(guān)系的數(shù)據(jù)

組合數(shù)據(jù):包含以上多種數(shù)據(jù)的數(shù)據(jù),如用戶聯(lián)系方式包括電話、地址1、地址2、手機號等

但是如果是object類型,那WPF如何知道具體該如何顯示這些數(shù)據(jù)呢?這就要通過Templates、Presenters、Binding and Converters、Layout和Styles了。

模板(Templates)

WPF本質(zhì)模板

控件模板control template):控件模板定義一個控件的外觀,這個控件主要和UI相關(guān),一般也不和Data有關(guān)。每個控件都有個一個缺省的控件模板。

  1. <ControlTemplate x:Key=”buttonTemplate”> 
  2. <Grid> 
  3. <Ellipse Width=”100” Height=”100”> 
  4. <Ellipse.Fill> 
  5. <LinearGradientBrush StartPoint=”0,0” EndPoint=”0,1”> 
  6. <GradientStop Offset=”0” Color=”Blue”/> 
  7. <GradientStop Offset=”1” Color=”Red”/> 
  8. </LinearGradientBrush> 
  9. </Ellipse.Fill> 
  10. </Ellipse> 
  11. <Ellipse Width=”80” Height=”80”> 
  12. <Ellipse.Fill> 
  13. <LinearGradientBrush StartPoint=”0,0” EndPoint=”0,1”> 
  14. <GradientStop Offset=”0” Color=”White”/> 
  15. <GradientStop Offset=”1” Color=”Transparent”/> 
  16. </LinearGradientBrush> 
  17. </Ellipse.Fill> 
  18. </Ellipse> 
  19. </Grid> 
  20. </ControlTemplate> 

數(shù)據(jù)模板data template):數(shù)據(jù)模板負責定制任何一個.Net對象的外觀,這對于非UIElement控件非常重要,非UIElement控件的默認模板僅僅是一個TextBlock,其中包含了一個由ToString方法反會的字符串。

模板

  1. <ListBox x:Name=”pictureBox” ItemsSource=”{Binding Source={StaticResource photos}}” …> 
  2. <ListBox.ItemTemplate> 
  3. <DataTemplate> 
  4. <Image Source=”placeholder.jpg” Height=”35”/> 
  5. </DataTemplate> 
  6. </ListBox.ItemTemplate> 
  7. …  
  8. </ListBox> 

大家可以通過工具ShowMeTheTemplate 來查看一下現(xiàn)有控件的默認模板。

    內(nèi)容控件(Presenters)

    通過Templates講解,我們現(xiàn)在知道控件模板定義控件外觀,數(shù)據(jù)模板定義特定的數(shù)據(jù)如何顯示,那么現(xiàn)在如何將定義的數(shù)據(jù)顯示在控件外觀上顯示呢?那就需要content presenter了。每個控件都有一個默認的ContentPresenter用于顯示Content內(nèi)容,我們稱這種控件為內(nèi)容控件,ContentPresenter負責將ContentControl的Content屬性顯示出來,如以下代碼示例:

    代碼效果

    1. <Grid> 
    2.         <Grid.Resources> 
    3.             <Style TargetType="Label"> 
    4.                 <Setter Property="Template"> 
    5.                     <Setter.Value> 
    6.                         <ControlTemplate TargetType="Label"> 
    7.                             <Grid> 
    8.                                 <Ellipse Margin="34,45,44,117" Fill="{TemplateBinding Background}"/> 
    9.                                 <ContentPresenter Content = {TemplateBinding Content}" HorizontalAlignment="Center" 
    10.                             VerticalAlignment="Center"/> 
    11.                             </Grid> 
    12.                         </ControlTemplate> 
    13.                     </Setter.Value> 
    14.                 </Setter> 
    15.             </Style> 
    16.         </Grid.Resources> 
    17.         <Label Background="Red" Content="hello wpf control"></Label> 
    18.     </Grid> 

    綁定(Binding) 和 轉(zhuǎn)換(Converters)

    數(shù)據(jù)模板描述了數(shù)據(jù)顯示的外觀,我們?nèi)绾问沟眠@些外觀和數(shù)據(jù)關(guān)聯(lián)起來呢?這就是數(shù)據(jù)綁定(data binding)來做的事情。WPF的數(shù)據(jù)綁定是一個強大的功能,它允許單項和雙向的綁定,當對象更改時UI會自動刷新,當UI操作后數(shù)據(jù)也可以自動更改。

    數(shù)據(jù)模板

    有時候數(shù)據(jù)的格式并不只是簡答的顯示,比如bool類型需要顯示成三態(tài),可以通過一個轉(zhuǎn)換器來實現(xiàn)。

    Binding和Converters代碼示例:網(wǎng)上很多這個資料,可以參考WPF Data Binding、Binding Converters

    布局(Layout

    經(jīng)過前面的步驟,模板已經(jīng)定義了,數(shù)據(jù)也有了,轉(zhuǎn)換器和綁定也觸發(fā)了,內(nèi)容顯示也生成了,剩下最后一步就是布局(layout)。布局系統(tǒng)將確定前面生產(chǎn)的所有UI控件的大小和位置。在WPF中panel以及其繼承類負責提供layout功能。布局是一種遞歸的分兩個步驟進行的過程,第一步叫做檢測(measuer),第二步叫做排列(arrange)。

    檢測:面板詢問其子元素到底需要多少空間,這里假設(shè)有足夠的控件。面板會重載FrameworkElement的MeasureOverride方法來實現(xiàn)這一步。

    排列:在檢測步驟完成后,就該排列元素了。面板會告訴子元素它們將放在哪里,它們有多少空間可以用。面板會重載FramworkElement的ArrangeOverride方法來實現(xiàn)這一步驟。

    樣式(Style

    樣式是一種簡單的機制,通過它可以把屬性值和用戶界面元素分類開來,有點類似CSS與HTML的關(guān)系

    以上內(nèi)容可以表達為下圖:Person數(shù)據(jù)經(jīng)過控件模板、數(shù)據(jù)模板以及樣式和布局,再加上數(shù)據(jù)綁定就可以展現(xiàn)數(shù)據(jù)了。

    內(nèi)容

    行為(Behavior)

    把數(shù)據(jù)顯示出來只是做了一半工作,還有一半就是提供用戶方式與UI進行交互。下圖說明了輸入操作示意圖:

    輸入操作示意圖

    WPF控件支持鼠標、鍵盤和寫字板等輸入設(shè)備來與UI進行交互,還可以通過外部和內(nèi)部時間進行操作,經(jīng)過觸發(fā)后可以通過事件處理或者command機制來進行Action。

    原文標題:WPF - 本質(zhì):數(shù)據(jù)和行為

    鏈接:http://www.cnblogs.com/zhoujg/archive/2009/11/19/1605424.html

    責任編輯:彭凡 來源: 博客園
    相關(guān)推薦

    2011-04-22 16:05:26

    測試

    2013-01-14 16:10:06

    2009-07-22 17:07:16

    WPF插件開發(fā).NET Framew

    2013-08-01 11:47:03

    ERPSAP

    2018-04-04 14:29:33

    2023-10-07 11:04:58

    WPF數(shù)據(jù)UI

    2021-08-15 16:29:45

    數(shù)據(jù)企業(yè)機器學(xué)習(xí)

    2009-09-14 13:30:04

    Linq數(shù)據(jù)和對象

    2023-06-28 07:54:44

    數(shù)據(jù)治理數(shù)據(jù)分析

    2009-04-07 09:28:39

    .NETWPF數(shù)據(jù)虛擬化

    2011-07-20 17:10:54

    C++

    2016-04-13 11:05:02

    C++引用匿名對象

    2009-07-17 10:02:29

    WPF程序多語言支持

    2021-06-10 18:59:41

    Java編程語言

    2009-06-22 14:13:00

    java工具javadocjar

    2009-07-02 17:06:36

    JSP中的PageEn

    2009-07-01 10:30:00

    Ruby on Rai

    2014-06-05 09:29:03

    數(shù)據(jù)處理

    2009-08-03 15:06:43

    C# Stack對象C# Queue對象

    2024-09-25 12:36:38

    數(shù)據(jù)中臺數(shù)據(jù)飛輪
    點贊
    收藏

    51CTO技術(shù)棧公眾號