WPF學習筆記(21)ListBox、ListView與控件模板

ListBox與控件模板

  • 一、 ListBox默認控件模板詳解
  • 二、ItemsPresenter集合數據呈現
    • 1. 概述
    • 2. 示例
  • 三、 ListView默認控件模板詳解
    • 1. 概述
    • 2. 示例


一、 ListBox默認控件模板詳解

WPF 中的大多數控件都有默認的控件模板
這些模板定義了控件的默認外觀和行為,包括控件的布局、背景、前景、邊框、內容等。
官方文檔:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/controls/listbox-styles-and-templates
在這里插入圖片描述
在工具箱拖入Button控件,鼠標右鍵→編輯模板→編輯副本在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
更改此模板來定制列表框的一些顯示,比如一直顯示水平垂直滾動條,可以直接更改Auto為 Visible:在這里插入圖片描述
演示效果如下:
在這里插入圖片描述

二、ItemsPresenter集合數據呈現

1. 概述

ltemsPresenter類在控件模板中顯示集合數據的一個占位符,以便在運行時將其替換為所有集合數據。
而ContentPresenter則只能顯示單一內容。
官方文檔:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.controls.itemspresenter?view=netframework-4.8
在這里插入圖片描述

2. 示例

在這里插入圖片描述
代碼和運行結果如下

    <Grid><ListBox x:Name="listBox" d:ItemsSource="{d:SampleData ItemCount=5}" Width="300" Height="200"><ListBox.Template><ControlTemplate TargetType="ListBox"><Border BorderBrush="Aqua" BorderThickness="2" CornerRadius="50"><!--如果要多次呈現內容,需要使用布局--><StackPanel><ItemsPresenter/><Rectangle Width="auto" Height="10" Fill="Red"/><ItemsPresenter/></StackPanel></Border></ControlTemplate></ListBox.Template></ListBox></Grid>
 public class Stu{public int Id { get; set; }public string Name { get; set; }public int Score { get; set; }public Stu(int id, string name, int score){Id = id;Name = name;Score = score;}}public partial class MainWindow : Window{public MainWindow(){InitializeComponent();List<Stu> list = new List<Stu>{new Stu(1, "張三",100),new Stu(2, "李四", 80),new Stu(3, "王五", 75)};listBox.DisplayMemberPath = "Name";listBox.ItemsSource = list;}}

在這里插入圖片描述

三、 ListView默認控件模板詳解

1. 概述

官方文檔:https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/controls/listview-styles-and-templates

在工具箱拖入ListView控件,刪除<ListView.View></ListView.View>內的所有內容,鼠標右鍵→編輯模板→編輯副本
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2. 示例

在這里插入圖片描述
參照官方文檔中示例:

<!--創建標題和內容模板--><Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="ScrollViewer"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ScrollViewer"><Grid Background="{TemplateBinding Background}" ShowGridLines="True"><!--第二行,第二列為滾動條,可設置Visibility屬性為True--><Grid.ColumnDefinitions><ColumnDefinition Width="*" /><ColumnDefinition Width="Auto" /></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="*" /><RowDefinition Height="Auto" /></Grid.RowDefinitions><DockPanel Margin="{TemplateBinding Padding}"><!--頭部標題--><ScrollViewer DockPanel.Dock="Top"HorizontalScrollBarVisibility="Hidden"VerticalScrollBarVisibility="Hidden"Focusable="false"><GridViewHeaderRowPresenter Margin="2,0,2,0"Columns="{Binding Path=TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderContainerStyle="{Binding Path=TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate,RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}"AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}"ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}"SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /></ScrollViewer><!--滾動內容--><ScrollContentPresenter Name="PART_ScrollContentPresenter"KeyboardNavigation.DirectionalNavigation="Local"CanContentScroll="True"CanHorizontallyScroll="False"CanVerticallyScroll="False" /></DockPanel><!--定義水平滾動條--><ScrollBar Name="PART_HorizontalScrollBar"Orientation="Horizontal"Grid.Row="1"Maximum="{TemplateBinding ScrollableWidth}"ViewportSize="{TemplateBinding ViewportWidth}"Value="{TemplateBinding HorizontalOffset}"Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /><!--定義垂直滾動條--><ScrollBar Name="PART_VerticalScrollBar"Grid.Column="1"Maximum="{TemplateBinding ScrollableHeight}"ViewportSize="{TemplateBinding ViewportHeight}"Value="{TemplateBinding VerticalOffset}"Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /></Grid></ControlTemplate></Setter.Value></Setter></Style><Color x:Key="ControlLightColor">White</Color><Color x:Key="BorderMediumColor">#FF888888</Color><Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color><Style x:Key="{x:Type ListView}"
TargetType="ListView"><Setter Property="SnapsToDevicePixels" Value="true" /><Setter Property="OverridesDefaultStyle" Value="true" /><Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" /><Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" /><Setter Property="ScrollViewer.CanContentScroll" Value="true" /><Setter Property="VerticalContentAlignment" Value="Center" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListView"><Border Name="Border" BorderThickness="1"><Border.Background><SolidColorBrush Color="{StaticResource ControlLightColor}" /></Border.Background><Border.BorderBrush><SolidColorBrush Color="{StaticResource BorderMediumColor}" /></Border.BorderBrush><ScrollViewer Style="{DynamicResource{x:Static GridView.GridViewScrollViewerStyleKey}}"><ItemsPresenter /></ScrollViewer></Border><ControlTemplate.Triggers><Trigger Property="IsGrouping" Value="true"><Setter Property="ScrollViewer.CanContentScroll" Value="false" /></Trigger><Trigger Property="IsEnabled" Value="false"><Setter TargetName="Border" Property="Background"><Setter.Value><SolidColorBrush Color="{DynamicResource DisabledBorderLightColor}" /></Setter.Value></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style>

在這里插入圖片描述

下面為簡潔模式,不含標題行

<Style x:Key="myCT" TargetType="ListView"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListView"><Border Name="Border" BorderBrush="red" BorderThickness="1"><ScrollViewer><ItemsPresenter /></ScrollViewer></Border></ControlTemplate></Setter.Value></Setter>
</Style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89999.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作系統【2】【內存管理】【虛擬內存】【參考小林code】

本文完全參考 虛擬內存內存分段內存分頁段頁式內存管理Linux內存管理 一、虛擬內存 1. 單片機的絕對物理地址 以單片機作為引子&#xff0c;它沒有操作系統&#xff0c;每次寫完程序是借助工具將程序燒錄進單片機&#xff0c;程序才能運行。 單片機由于沒有操作系統&#…

【王樹森推薦系統】召回05:矩陣補充、最近鄰查找

概述 這節課和后面幾節課將詳細講述向量召回&#xff0c;矩陣補充是向量召回最簡單的一種方法&#xff0c;不過現在已經不太常用這種方法了本節課的矩陣補充是為了幫助理解下節課的雙塔模型上節課介紹了embedding&#xff0c;它可以把用戶ID和物品ID映射成向量 矩陣補充 模型…

C# 事件(訂閱事件和觸發事件)

訂閱事件 訂閱者向事件添加事件處理程序。對于一個要添加到事件的事件處理程序來說&#xff0c;它必須具有 與事件的委托相同的返回類型和簽名。 使用運算符來為事件添加事件處理程序&#xff0c;如下面的代碼所示。事件處理程序位于該運 算符的右邊。事件處理程序的規范可以…

64頁精品PPT | 基于DeepSeek的數據治理方案AI大數據治理解決方案數據治理大模型解決方案

這份PPT文檔是關于基于DeepSeek的大模型技術在數據治理方案中的應用介紹。強調數據作為新型生產要素與人工智能技術相結合的重要性&#xff0c;指出大模型憑借強大的文學理解、生成能力以及多模態數據處理能力&#xff0c;能為數據治理帶來新機遇。文檔詳細闡述了數據資產化的路…

【文獻筆記】Tree of Thoughts: Deliberate Problem Solving with Large Language Models

Tree of Thoughts: Deliberate Problem Solving with Large Language Models https://github.com/princeton-nlp/tree-of-thought-llm 標題翻譯&#xff1a;思維樹&#xff1a;利用大型語言模型問題求解 1. 內容介紹 1.1. 背景 決策過程有兩種模式&#xff1a; 快速、自動…

使用 Mathematical_Expression 從零開始實現數學題目的作答小游戲【可復制代碼】

從零開始實現數學題目的作答小游戲 開源技術欄 使用 Mathematical_Expression 讓計算機做出題人&#xff0c;讓代碼與數學碰撞出趣味火花。 目錄 文章目錄 從零開始實現數學題目的作答小游戲目錄 從零開始實現數學題目的作答小游戲&#xff1a;讓代碼與數學碰撞出趣味火花為…

DQL-9-小結

DQL-9-小結 小結DQL語句 小結 DQL語句 SELECT 字段列表 -- 字段名 [AS] 別名FROM 表名列表WHERE條件列表 -- >、 >、 <、 <、 、 <>、 like、 between ... and、 in、 and、 or, 分組之前過濾 GROUP BY分組字段列表HAVING分組后條件列表 -- 分組之后…

[netty5: WebSocketServerHandshaker WebSocketServerHandshakerFactory]-源碼分析

在閱讀這篇文章前&#xff0c;推薦先閱讀以下內容&#xff1a; [netty5: WebSocketFrame]-源碼分析[netty5: WebSocketFrameEncoder & WebSocketFrameDecoder]-源碼解析 WebSocketServerHandshakerFactory WebSocketServerHandshakerFactory 用于根據客戶端請求中的 Web…

數據挖掘:深度解析與實戰應用

在當今數字化時代&#xff0c;數據挖掘已經成為企業獲取競爭優勢的關鍵技術之一。通過從大量數據中提取有價值的信息&#xff0c;企業可以更好地理解客戶需求、優化業務流程、提高運營效率。本文將深入探討數據挖掘的核心技術、實際應用案例以及如何在企業中實施數據挖掘項目。…

LLM面試題14

算法崗面試題 介紹下Transformer模型。 Transformer本身是一個典型的encoder-decoder模型&#xff0c;Encoder端和Decoder端均有6個Block,Encoder端的Block包括兩個模塊&#xff0c;多頭self-attention模塊以及一個前饋神經網絡模塊&#xff1b;Decoder端的Block包括三個模塊&…

Java金融場景中為什么金額字段禁止使用浮點類型(float/double)?

引言 Java金融場景中為什么金額字段禁止使用浮點類型&#xff1f;這是一篇你不能忽視的“爆雷”警告&#xff01; 在金融、電商、支付、清結算等業務系統中&#xff0c;浮點類型是絕對禁區&#xff01; &#x1f6a8;一、核心警告&#xff1a;浮點類型不是十進制數&#xff01;…

SVN下載與拉取

大家好我是蘇麟&#xff0c;今天聊一聊SVN。 SVN官網&#xff1a;下載 TortoiseSVN - TortoiseSVN 軟件 根據系統選擇32位還是64位 打開文件 安裝&#xff0c;下一步&#xff0c;下一步 安裝成功后&#xff0c;右鍵找到SVNcheck 輸入地址 輸入用戶名和密碼就OK了 這期就到這里…

數據結構筆記8:堆

目錄 滿二叉樹&#xff1a; 完全二叉樹&#xff1a; 堆是一種特殊的完全二叉樹&#xff1a; 我們可以以數組的方式存儲堆。 父節點和子節點下標關系的推導&#xff1a; 1.使用數學歸納法證明n2 1 n0&#xff1a; 2.使用邊和節點的關系證明n2 1 n0&#xff1a; 我們…

3. lvgl 9.3 vscode 模擬環境搭建 lv_port_pc_vscode-release-v9.3

文章目錄1. 資源下載1. 1 lv_port_pc_vscode1.2 cmake 和 mingw 環境搭建1.3 sdl 下載1.4 下載lvgl_v9.32. 環境搭建2.1 拷貝lvgl 源碼到工程2.2 添加SDL2 依賴2.3 執行工程3. 運行示例1. 資源下載 1. 1 lv_port_pc_vscode 那么多模擬器&#xff0c;為什么選擇這個&#xff1…

【牛客刷題】小紅的爆炸串(二)

一、題目介紹 本題鏈接為:小紅的爆炸串(二) 小紅定義一個字符串會爆炸,當且僅當至少有k對相鄰的字母不同。 例如,當 k k k=2時,"arc"會爆炸,而"aabb"則不會爆炸。 小紅拿到了一個長度為

【實戰】如何訓練一個客服語音對話場景VAD模型

1. 引言:客服場景下的VAD模型 在客服中心,每天都會產生海量的通話錄音。對這些錄音進行有效分析,可以用于服務質量監控、客戶意圖洞察、流程優化等。VAD在其中扮演著“預處理器”和“過濾器”的關鍵角色: 提升ASR效率與準確性:只將檢測到的語音片段送入ASR引擎,可以避免…

在 Dokploy 中為 PostgreSQL 搭建 PgBouncer 數據庫連接池(圖文)

前言&#xff1a;為什么你需要一個連接池&#xff1f; 如果你正在使用 Node.js (尤其是像 Next.js 這樣的框架) 配合 Prisma 操作 PostgreSQL 數據庫&#xff0c;你很可能在某個階段會遇到那個令人頭疼的錯誤&#xff1a;“Error: Too many clients already”。這通常發生在應…

Mac獲取終端歷史

在 macOS 中&#xff0c;歷史記錄文件的位置取決于你使用的 shell。以下是針對不同 shell 的歷史記錄文件的默認位置&#xff1a;對于 Bash 用戶&#xff1a; 歷史記錄文件通常位于 ~/.bash_history。對于 Zsh 用戶&#xff08;macOS Catalina及以后版本默認使用的shell&#x…

高頻交易服務器篇

在 Binance 進行高頻交易&#xff08;HFT&#xff09;時&#xff0c;服務器的低延遲、高穩定性和快速網絡是關鍵。亞馬遜云&#xff08;AWS&#xff09; 提供了多種適合高頻交易的方案&#xff0c;以下是推薦的配置和優化策略&#xff1a;1. 選擇 AWS 區域&#xff08;Region&a…

MVC與MVVM架構模式詳解:原理、區別與JavaScript實現

Hi&#xff0c;我是布蘭妮甜 &#xff01;在當今復雜的前端開發領域&#xff0c;如何組織代碼結構一直是開發者面臨的核心挑戰。MVC和MVVM作為兩種經典的架構模式&#xff0c;為前端應用提供了清晰的責任劃分和可維護的代碼組織方案。本文將深入探討這兩種模式的原理、實現差異…