主頁 > .NET開發 > WPF_06_控制元件

WPF_06_控制元件

2021-11-12 06:12:55 .NET開發

WPF控制元件繼承自 System.Windows.Control 類,包括以下控制元件:

  • 內容控制元件:可包含嵌套的元素,包括 Label,Button,ToolTip,ScrollViewer
  • 帶標題的內容控制元件:通常用于封裝更大的用戶界面塊,包括 TabItem,GroupBox,Expander
  • 文本控制元件:支持輸入文本,包括 Textbox,PasswordBox,RickTextBox
  • 串列控制元件:包括 ListBox,ComboBox
  • 基于范圍的控制元件:通常只有共同的屬性 Value,包括Slider,ProgressBas
  • 日期控制元件:包括 Calendar,DataPicker

內容控制元件

內容控制元件可包含并顯示一塊內容,與布局容器不同的是,只能包含一個子元素,內容控制元件都繼承自抽象類 ContentControl .

Content屬性

Content屬性支持任何型別的物件,但可分為兩大類:

  • 未繼承自 UIElement 類的物件: 呼叫這些控制元件的 ToString() 方法獲取文本
  • 繼承自 UIElement 類的物件:使用 UIElement.OnRender() 方法進行顯示

HorizontalContentAlignment,VerticalContentAlignment 以及 Padding 屬性都是在 Control 類中定義,而非 ContentControl 類中定義,這是因為有些控制元件不是內容控制元件也需要包含某些型別的內容,

標簽

Label 控制元件支持 記憶符(mnemonics)-能夠為鏈接的控制元件設定焦點的快捷鍵,

<Label Target="{Binding ElementName=txtA}"> Choose _A</Label>
<TextBox Name="txtA"/>
<Label Target="{Binding ElementName=txtB}"> Choose _B</Label>
<TextBox Name="txtB"></TextBox>

按鈕

ButtonBase 定義了 Click 事件并添加了對命令的支持,添加了 ClickMode 屬性,

Button

Button 添加了兩個可寫屬性:

  • IsCancel 設定為ture時,按鈕就成為視窗的取消按鈕,在任何位置按下 Esc鍵就會觸發
  • IsDefault 設定為true時,按鈕就成為默認按鈕
ToggleButton 和 RepeatButton
  • GridViewColumnHeader 使用ListView時,該類表示一列可以單擊的標題
  • RepeatButton 只要按鈕保持按下狀態就不斷觸發
  • ToggleButton 有兩個狀態的按鈕
CheckBox

CheckBox 繼承自 ToggleButton ,可以切換開關狀態,

RadioButton

RadioButton 繼承自ToggleButton,增加了 GroupName 屬性進行分組,

并非一定使用 GroupBox 容器封裝單選按鈕,但通常約定如此,GourpBox控制元件顯示一條邊框和標題,

工具提示

WPF中工具提示是內容控制元件,可以放置任何可視化元素,可控制工具提示的顯示和隱藏速度,

<Button ToolTip="This is my toolTip"> I have a tooltip </Button>
<Button Content="I have a fancy tooltip">
    <Button.ToolTip>
        <StackPanel>
            <TextBlock Margin="3"> Image and text</TextBlock>
            <Image Source="happy.jpg" Stretch="None"/>
            <TextBlock Margin="3">Image and text</TextBlock>
        </StackPanel>
    </Button.ToolTip>
</Button>

特殊容器

內容控制元件不僅包括基本控制元件,如標簽、按鈕以及工具提示;還包括特殊容器,可用于構造用戶界面比較大的部磁區域,

ScrollViewer

為了獲得滾動支持,需要在 ScrollViewer 控制元件中封裝希望滾動的內容,

通過代碼進行滾動
  • LineUp() 和 LineDown() ,向上或向下滾動滾動一整屏,
  • 用于水平滾動的類似方法,包括 LineLeft(),LineRight(),PageLeft(),PageRight()
  • ScrollToXxx() 滾動到任何特定位置,ScrollToEnd() 和 ScrollToHome()可以滾動到內容的頂部和底部,ScrollToVerticalOffset() 可以滾動到特定位置,ScrollToLeftEnd(),ScrollToRightEnd(),ScrollToHorizontalOffset().
自定義滾動
  • 在ScrollViewer中放置元素,是實作了 IScrollInfo 介面的任意元素
  • 將ScrollViewer.CanContentScroll 設定為true
  • ScrollViewer控制元件通過 IScrollInfo 介面來呼叫元素的方法

GroupBox

GroupBox 顯示為具有圓角和標題的方框,仍需要布局容器來布置內容,GroupBox 經常使用對數量不多的相關控制元件進行分組,比如幾個單選按鈕,

TabItem

TabItem 表示TabControl控制元件中的一頁,
與Content屬性一樣,Header屬性可接受任何型別的物件,繼承自 UIElement 的類通過渲染來顯示,對于行內文本以及其他所有物件使用 ToString() 方法,

Expander

Expander 是具有標題的內容控制元件,封裝了一塊內容,通過單擊小箭頭按鈕可顯示或隱藏內容,在線幫助以及 Web 頁面經常使用這種技術,
可以使用 ExpandDirection 設定為 Up,Left 或 Right

文本控制元件

PasswordBox 控制元件直接繼承自Control類,TextBox和RichTextBox控制元件間接繼承自 TextBoxBase 類,

多行文本

TextBox可以設定 MaxLength 來限制字符的數量,如果 TextWrapping=Wrap 是在控制元件的邊緣換行;如果TextWrapping=WrapWithOverflow 允許拉伸某些行使其超出右邊緣,
通過 VerticalScrollBarVisibility 設定為 Visible 或 Auto,添加始終顯示或按需顯示的滾動條,

選擇文本

TextBox 還提供了使用 SelectionStart,SelectionLength 以及 SelectedText 屬性來決定選擇哪些文本或改變當前所選文本的能力,Undo 功能允許用戶撤銷最近的操作,

拼寫檢查

設定 TextBox 的 SpellCheck.IsEnabled 屬性即可拼寫檢查,

串列控制元件

串列控制元件繼承自 ItemsControl ,該類添加了所有基于串列的控制元件都使用的基本功能,

ListBox

ListBox 不僅可以包含ListBoxItem物件,也可以是其他任意元素,ListBoxItem繼承自 ContentControl 類,

<ListBox>
    <ListBoxItem>
        <StackPanel Orientation="Horizontal">
            <Label VerticalContentAlignment="Center">A happy face</Label>
            <Image Source="happy.jpg"/>
        </StackPanel>
    </ListBoxItem>
</ListBox>

ListBox 能夠隱式創建所需要的 ListBoxItem 物件,此時 SelectedItem 值是放到串列中的物件,

ComboBox

ComboBox控制元件包含 ComboBoxItem 物件,既可以顯示地也可以隱士地創建該集合,設定 IsEditable = true,可以允許用戶通過輸入文本選擇一項,

基于范圍的控制元件

ScrollBar,ProgressBar,Slider 都繼承自 RangeBase 類,這些控制元件用在特定最小值和最大值之間的數值,

屬性 說明
Value 當前值,默認從0開始
Maximum 最大值
Minimum 最小值
SmallChange Value屬性為“小變化”向上或向下調整的數量,對于ScrollBar和Slider是使用箭頭鍵時值改變的量
LargeChange Value屬性為“大變化”向上或向下調整的數量,對于ScrollBar和Slider是使用 PageUp和PageDown鍵或單擊滑塊兩側時值改變的量

Slider

音量控制時,背后的數字對于用戶來說是沒有意義的,是 Slider 典型的應用,

屬性 說明
Orientation 豎直或水平
Delay Interval 按下滑動條兩側時,移動速度
TickPlacement 刻度顯示的位置
TickFrequency 設定刻度之間的間隔,決定了顯示多少刻度
Ticks 如果希望在特定不規則位置顯示刻度,可使用 Ticks 集合
IsSnapToTickEnabled 當移動滑塊會自動跳轉到最近的刻度標記
IsSelectionRangeEnabled 可使用選擇范圍使滑塊條的一部分顯示陰影

ProgressBar

ProgressBar 控制元件只是長時間運行任務的進度,不能與用戶互動,需要代碼遞增 Value 屬性值,如果將 IsIndeterminate = true ,會周期性顯示從左向右跳動的綠色脈沖,用于長時間運行或者不知道執行多少時間的情況,

我的公眾號

HelloProgram

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/355999.html

標籤:WPF

上一篇:記一次WPF應用在用戶電腦無法啟動

下一篇:3D 穿梭效果?使用 UWP 也能搞定

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more