欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WPF使用WrapPanel實(shí)現(xiàn)虛擬化效果

 更新時(shí)間:2022年09月19日 08:43:27   作者:驚鏵  
這篇文章主要為大家詳細(xì)介紹了如何利用WPF WrapPanel實(shí)現(xiàn)虛擬化效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下

WrapPanel 實(shí)現(xiàn)虛擬化

1.框架使用大于等于.NET40;

2.Visual Studio 2022;

3.項(xiàng)目使用 MIT 開(kāi)源許可協(xié)議;

4.眾所周知 WPF 的 StackPanel 在加載大量數(shù)據(jù)時(shí)性能會(huì)特別差,但是官方提供了一個(gè)虛擬化容器VirtualizingStackPanel;

  • VirtualizingStackPanel.IsVirtualizing 附加屬性設(shè)置為 true時(shí)就開(kāi)啟虛擬化。
  • VirtualizingStackPanel.IsVirtualizing 附加屬性設(shè)置為 falseVirtualizingStackPanel行為與普通StackPanel屬性的行為相同。

5.WrapPanel 默認(rèn)是不支持虛擬化的,所以需要自行實(shí)現(xiàn)。

1) VirtualizingWrapPanel 查看源碼  |   VirtualizingWrapPanel 查看源碼

2) 準(zhǔn)備數(shù)據(jù)HospitalList.cs如下:

using?System;
using?System.Collections.Generic;
using?System.Collections.ObjectModel;
using?System.Windows.Media;

namespace?WPFDevelopers.Minimal.Sample.Models
{
????public?class?HospitalList?:?ObservableCollection<Hospital>
????{
????????public?HospitalList()
????????{
????????????var?hospitals?=?new?string[]?{?"No.?189,?Grove?St,?Los?Angeles",?"No.?3669,?Grove?St,?Los?Angeles"?};
????????????var?names?=?new?string[]?{?"Doctor?Fang",?"Judge?Qu"?};
????????????var?images?=?new?string[]?
????????????????{?"https://pic2.zhimg.com/80/v2-0711e97955adc9be9fbcff67e1007535_720w.jpg",
??????????????????//"https://pic2.zhimg.com/80/v2-5b7f84c63075ba9771f6e6dc29a54615_720w.jpg",
??????????????????"https://pic3.zhimg.com/80/v2-a3d6d8832090520e7ed6c748a8698e4e_720w.jpg",
??????????????????"https://pic3.zhimg.com/80/v2-de7554ac9667a59255fe002bb8753ab6_720w.jpg"
????????????????};
????????????var?state?=?0;
????????????for?(var?i?=?1;?i?<?10000;?i++)
????????????{
????????????????Add(new?Hospital?{?Id?=?$"9999{i}",?DoctorName?=?i?%?2?==?0???names[0]:names[1],?HospitalName?=?i?%?2?==?0???hospitals[0]?:?hospitals[1]?,State?=?state?,UserImage?=?images[state]?});
????????????????state++;
????????????????if?(state?>?2)
????????????????????state?=?0;
????????????}
????????}
????}

????public?class?Hospital
????{
????????public?string?Id?{?get;?set;?}
????????public?string?DoctorName?{?get;?set;?}
????????public?string?HospitalName?{?get;?set;?}
????????public?string?UserImage?{?get;?set;?}
????????public?int?State?{?get;?set;?}
????}
}

3) 新建展示VirtualizingWrapPanelExample.xaml如下:

?<ws:Window?x:Class="WPFDevelopers.Minimal.Sample.ExampleViews.VirtualizingWrapPanelExample"
????????xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
????????xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
????????xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
????????xmlns:ws="https://github.com/WPFDevelopersOrg/WPFDevelopers.Minimal"
????????xmlns:local="clr-namespace:WPFDevelopers.Minimal.Sample.ExampleViews"
????????xmlns:model="clr-namespace:WPFDevelopers.Minimal.Sample.Models"
????????xmlns:converts="clr-namespace:WPFDevelopers.Minimal.Sample.Converts"
????????mc:Ignorable="d"?WindowStartupLocation="CenterScreen"
????????Title="System?V1.0"?Height="450"?Width="900">
????<Window.Resources>
????????<model:HospitalList?x:Key="myHospitalList"/>
????????<converts:StateConvert??x:Key="stateConvert"></converts:StateConvert>
????</Window.Resources>
????<Grid?Margin="4">
????????<WrapPanel?HorizontalAlignment="Left">
????????????<WrapPanel.Resources>
????????????????<Style?TargetType="Border">
????????????????????<Setter?Property="Padding"?Value="2"></Setter>
????????????????????<Setter?Property="BorderThickness"?Value="1"></Setter>
????????????????</Style>
????????????????<Style?TargetType="Rectangle">
????????????????????<Setter?Property="Width"?Value="15"></Setter>
????????????????????<Setter?Property="Height"?Value="15"></Setter>
????????????????????<Setter?Property="Opacity"?Value=".2"></Setter>
????????????????</Style>
????????????</WrapPanel.Resources>
????????????<WrapPanel>
????????????????<Border?BorderBrush="Green">
????????????????????<Rectangle?Fill="Green"/>
????????????????</Border>
????????????????<TextBlock?Text="Idle"?Foreground="Black"?Margin="4,0"/>
????????????</WrapPanel>
????????????<WrapPanel>
????????????????<Border?BorderBrush="Orange">
????????????????????<Rectangle?Fill="Orange"/>
????????????????</Border>
????????????????<TextBlock?Text="Slightly?Idle"?Foreground="Black"?Margin="4,0"/>
????????????</WrapPanel>
????????????<WrapPanel>
????????????????<Border?BorderBrush="Red">
????????????????????<Rectangle?Fill="Red"/>
????????????????</Border>
????????????????<TextBlock?Text="Busy"?Foreground="Black"?Margin="4,0"/>
????????????</WrapPanel>
????????</WrapPanel>
????????<TextBlock?HorizontalAlignment="Right"?Foreground="Black"
???????????????????Margin="4,2"?FontSize="16">
????????????<Run?Text="Count:"></Run>
????????????<Run?Text="{Binding?ElementName=DocumentsList,Path=.Items.Count,Mode=OneTime}"></Run>
????????</TextBlock>

????????<ListBox?x:Name="DocumentsList"
??????ItemsSource="{Binding?Source={StaticResource?myHospitalList}}"
?????????????????????Margin="0,24,0,0">
????????????<ListBox.ItemTemplate>
????????????????<DataTemplate>
????????????????????<Border?BorderBrush="{Binding?State,Converter={StaticResource?stateConvert}}"?
????????????????????????????BorderThickness="1"
????????????????????????????Width="196"
????????????????????????????Height="94">
????????????????????????<Grid>
????????????????????????????<Grid.ColumnDefinitions>
????????????????????????????????<ColumnDefinition/>
????????????????????????????????<ColumnDefinition/>
????????????????????????????</Grid.ColumnDefinitions>
????????????????????????????<Grid.RowDefinitions>
????????????????????????????????<RowDefinition/>
????????????????????????????????<RowDefinition/>
????????????????????????????????<RowDefinition/>
????????????????????????????</Grid.RowDefinitions>
????????????????????????????<Rectangle?
????????????????????????????????Fill="{Binding?State,Converter={StaticResource?stateConvert}}"?
????????????????????????????????Opacity=".2"?Grid.ColumnSpan="2"?
????????????????????????????????Grid.RowSpan="3"/>

????????????????????????????<Border?Grid.RowSpan="2"?Grid.Column="0"?Width="60"?Height="60"
???????????????????????????????????????Margin="0,4,0,0"?CornerRadius="10">
????????????????????????????????<Border.Background>
????????????????????????????????????<ImageBrush?ImageSource="{Binding?UserImage}"?Stretch="Uniform"/>
????????????????????????????????</Border.Background>
????????????????????????????</Border>
????????????????????????????<TextBlock?Grid.Column="1"?Grid.Row="0"
?????????????????????Text="{Binding?Path=Id}"?Margin="0,4,0,0"/>
????????????????????????????<TextBlock?Grid.Column="1"?Grid.Row="1"
?????????????????????Text="{Binding?Path=DoctorName}"/>
????????????????????????????<TextBlock?Grid.ColumnSpan="2"?Grid.Row="2"
???????????????????????????????????????Padding="10,0"
?????????????????????Text="{Binding?Path=HospitalName}"?TextTrimming="CharacterEllipsis"/>
????????????????????????</Grid>
????????????????????</Border>
????????????????</DataTemplate>
????????????</ListBox.ItemTemplate>
????????????<ListBox.Template>
????????????????<ControlTemplate>
????????????????????<Border?CornerRadius="2"?
???????????????????BorderBrush="{TemplateBinding?BorderBrush}"
???????????????????BorderThickness="{TemplateBinding?BorderThickness}">
????????????????????????<ScrollViewer?x:Name="ScrollViewer"
??????????????????????????????????????Padding="{TemplateBinding?Padding}"?
??????????????????????????????????????Background="{TemplateBinding?Background}"?
??????????????????????????????????????BorderBrush="Transparent"?BorderThickness="0"??IsTabStop="False">
????????????????????????????<ItemsPresenter?/>
????????????????????????</ScrollViewer>
????????????????????</Border>
????????????????</ControlTemplate>
????????????</ListBox.Template>

????????????<ListBox.ItemsPanel>
????????????????<ItemsPanelTemplate>
????????????????????<ws:VirtualizingWrapPanel?ItemWidth="200"
?????????????????????????????????????????????????ItemHeight="100"/>
????????????????</ItemsPanelTemplate>
????????????</ListBox.ItemsPanel>
????????</ListBox>
????</Grid>
</ws:Window>

4) 狀態(tài)StateConvert.cs如下:

using?System;
using?System.Windows.Data;
using?System.Windows.Media;

namespace?WPFDevelopers.Minimal.Sample.Converts
{
????public?class?StateConvert?:?IValueConverter
????{
????????public?object?Convert(object?value,?Type?targetType,?object?parameter,?System.Globalization.CultureInfo?cultureInfo)
????????{
????????????var?color?=?Brushes.Green;
????????????if?(value?!=?null)
????????????{
????????????????var?state?=?int.Parse(value.ToString());
????????????????switch?(state)
????????????????{
????????????????????case?0:
????????????????????????color?=?Brushes.Green;
????????????????????????break;
????????????????????case?1:
????????????????????????color?=?Brushes.Orange;
????????????????????????break;
????????????????????case?2:
????????????????????????color?=?Brushes.Red;
????????????????????????break;
????????????????}
????????????}

????????????return?color;
????????}
????????public?object?ConvertBack(object?value,?Type?targetType,?object?parameter,?System.Globalization.CultureInfo?cultureInfo)
????????{
????????????throw?new?NotImplementedException();
????????}
????}
}

實(shí)現(xiàn)效果

到此這篇關(guān)于WPF使用WrapPanel實(shí)現(xiàn)虛擬化效果的文章就介紹到這了,更多相關(guān)WPF WrapPanel虛擬化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c# 遍歷獲取所有文件的示例代碼

    c# 遍歷獲取所有文件的示例代碼

    這篇文章主要介紹了c# 遍歷獲取所有文件的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • VS2019使用快捷鍵將代碼對(duì)齊的方法

    VS2019使用快捷鍵將代碼對(duì)齊的方法

    這篇文章主要介紹了VS2019使用快捷鍵將代碼對(duì)齊的相關(guān)資料,非常不錯(cuò)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • C#調(diào)用QQ_Mail發(fā)送郵件實(shí)例代碼兩例

    C#調(diào)用QQ_Mail發(fā)送郵件實(shí)例代碼兩例

    這篇文章介紹了C#調(diào)用QQ_Mail發(fā)送郵件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 詳析C#的協(xié)變和逆變

    詳析C#的協(xié)變和逆變

    這篇文章主要介紹了詳析C#的協(xié)變和逆變,在引用類型系統(tǒng)時(shí),協(xié)變、逆變和不變性具有如下定義。?這些示例假定一個(gè)名為?Base?的基類和一個(gè)名為?Derived的派生類,更多內(nèi)容請(qǐng)需要的小伙伴參考下面文章內(nèi)容
    2022-01-01
  • 解析.NET中幾種Timer的使用

    解析.NET中幾種Timer的使用

    本文主要對(duì).NET中4個(gè)Timer類,及其用法進(jìn)行梳理,具有很好參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布

    C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布

    在消息隊(duì)列模型中,如何將消息廣播到所有的消費(fèi)者,這種模式成為“發(fā)布/訂閱”。本文主要以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述通過(guò)fanout交換機(jī),實(shí)現(xiàn)消息的發(fā)布與訂閱,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。
    2021-05-05
  • C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表詳細(xì)

    C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表詳細(xì)

    這篇文章主要介紹了C# dump系統(tǒng)lsass內(nèi)存和sam注冊(cè)表,在這里選擇 C# 的好處是體積小,結(jié)合 loadAssembly 方便免殺,希望對(duì)讀者們有所幫助
    2021-09-09
  • C# WINFORM自定義異常處理方法

    C# WINFORM自定義異常處理方法

    這篇文章主要介紹了一個(gè)簡(jiǎn)單的統(tǒng)一異常處理方法。系統(tǒng)底層出現(xiàn)異常,寫入記錄文件,系統(tǒng)頂層捕獲底層異常,顯示提示信息。需要的可以參考一下
    2021-12-12
  • 分享WCF文件傳輸實(shí)現(xiàn)方法---WCFFileTransfer

    分享WCF文件傳輸實(shí)現(xiàn)方法---WCFFileTransfer

    這篇文章主要介紹了分享WCF文件傳輸實(shí)現(xiàn)方法---WCFFileTransfer,需要的朋友可以參考下
    2015-11-11
  • 詳解C# 枚舉高級(jí)用法之Description

    詳解C# 枚舉高級(jí)用法之Description

    這篇文章主要介紹了C# 枚舉高級(jí)用法之Description,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評(píng)論