WPF之多种视图切换

1,View切换,效果呈现

  • 视图1

  • 视图2

  • 视图3

2,在Xaml中添加Listview控件,Combobox控件。

<Grid ><Grid.RowDefinitions><RowDefinition Height="143*"/><RowDefinition Height="30"/></Grid.RowDefinitions><ListView Grid.IsSharedSizeScope="True" x:Name="listview01" BorderBrush="Red" BorderThickness="2" ></ListView><StackPanel Grid.Row="1" Orientation="Horizontal"><TextBlock Text="选择视图模式:" VerticalAlignment="Center"></TextBlock><ComboBox x:Name="combo01" SelectionChanged="combo01_Selected"  MinWidth="150" VerticalContentAlignment="Center"><sys:String>GirdView</sys:String><sys:String>ImageDetailView</sys:String><sys:String>ImageView</sys:String></ComboBox></StackPanel></Grid>

3,自定义显示的视图。

 [ContentProperty("ItemTemplate")]/// <summary>/// 自定义的显示视图/// </summary>public class TitleView : ViewBase{/// <summary>/// ListViewItem数据模板,对应的是ListView的每一项/// </summary>public DataTemplate ItemTemplate{get; set;}/// <summary>/// 选中时的背景颜色/// </summary>public Brush SelectedBackgroundBrush { get; set; } = new SolidColorBrush(Colors.Transparent);/// <summary>/// 选中时的前景颜色/// </summary>public Brush SelectedForegroundBrush { get; set; } = new SolidColorBrush(Colors.Black);/// <summary>/// ListView默认样式资源建,根据此键从Themes文件下资源字典Generic.xaml中获取默认的ListView样式/// </summary>protected override object DefaultStyleKey{get{//根据反射可知只要两个 public ComponentResourceKey(Type typeInTargetAssembly, object resourceId);//中typeInTargetAssembly相同,resourceId相同则两个实例的hashcode相同,equal为 True 即两个实例相等return new ComponentResourceKey(GetType(),"TitleView");}}/// <summary>/// ListViewItem默认样式资源键,根据此键从Themes文件下资源字典Generic.xaml中获取默认的ListViewItem样式/// </summary>protected override object ItemContainerDefaultStyleKey{get{return new ComponentResourceKey(GetType(),"TitleViewItem") ;}}}
  • ListView.View:类型为ViewBase。
  • ViewBase为抽象类,系统只有一个派生类:GridView。
  • ListView.View用于表达ListViewItem中数据呈现的方式,在某一程度上可用ItemTemplate代替。
  •  使用ComponentResourceKey指定资源而不是使用字符串指定资源。

4,定义默认样式。

  • 同自定义无外观控件一样,其默认的样式也必须位于Themes文件夹下的资源字典Generic.xaml
 <Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:TitleView} ,ResourceId=TitleViewItem}" TargetType="ListViewItem"  ><Setter Property="ContentTemplate" Value="{Binding RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType=ListView}, Path=View.ItemTemplate}"></Setter><!--<Setter Property="Grid.IsSharedSizeScope" Value="True"></Setter>--><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListViewItem"><Border x:Name="Part_Border" Background="Transparent"><ContentPresenter ></ContentPresenter></Border><ControlTemplate.Triggers><Trigger Property="IsSelected" Value="true"><Setter TargetName="Part_Border" Property="Background" Value="{Binding RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType=ListView}, Path=View.SelectedBackgroundBrush}"></Setter><Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType=ListView}, Path=View.SelectedForegroundBrush}"></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style><Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:TitleView} ,ResourceId=TitleView}" TargetType="ListView" ><Setter Property="ItemsPanel"><Setter.Value><ItemsPanelTemplate><WrapPanel></WrapPanel></ItemsPanelTemplate></Setter.Value></Setter><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="ListView"><Border Margin="{TemplateBinding Margin}"  BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="5" Background="{TemplateBinding Background}"><ScrollViewer Margin="{TemplateBinding Padding}"><ItemsPresenter></ItemsPresenter></ScrollViewer></Border></ControlTemplate></Setter.Value></Setter></Style>

5,添加对象资源。

<Window.Resources><GridView x:Key="GirdView"><GridViewColumn Header="Name" DisplayMemberBinding="{Binding ModelName}"></GridViewColumn><GridViewColumn Header="Model" DisplayMemberBinding="{Binding ModelNumber}"></GridViewColumn><GridViewColumn Header="Price" DisplayMemberBinding="{Binding UnitCost,  StringFormat={}{0:C2}}"></GridViewColumn></GridView><local:TitleView x:Key="ImageDetailView" SelectedBackgroundBrush="LightGreen" SelectedForegroundBrush="Red"><local:TitleView.ItemTemplate><DataTemplate><Border BorderBrush="SkyBlue" BorderThickness="2" Margin="5" Padding="5" CornerRadius="5"><Grid ><Grid.ColumnDefinitions><ColumnDefinition Width="auto"></ColumnDefinition><ColumnDefinition Width="auto" SharedSizeGroup="c1"></ColumnDefinition></Grid.ColumnDefinitions><Image Margin="2" Width="100" Source="/Img/1.jpg" Stretch="Fill"></Image><StackPanel Grid.Column="1"><TextBlock Text="{Binding ModelName}" FontSize="16" FontWeight="Bold"></TextBlock><TextBlock Text="{Binding ModelNumber}" ></TextBlock><TextBlock Text="{Binding UnitCost, StringFormat={}{0:C2}}" ></TextBlock></StackPanel></Grid></Border></DataTemplate></local:TitleView.ItemTemplate></local:TitleView><local:TitleView x:Key="ImageView" SelectedBackgroundBrush="LawnGreen" SelectedForegroundBrush="Blue"><DataTemplate><Border BorderBrush="Chocolate" BorderThickness="2" Margin="3" Padding="5"><StackPanel Width="100"><Image Source="/Img/2.jpg" Stretch="Fill"></Image><TextBlock Text="{Binding ModelName}" TextWrapping="Wrap"></TextBlock></StackPanel></Border></DataTemplate></local:TitleView></Window.Resources>
  • 在GridView中的GridViewColumn既设置属性DisplayMember也设置属性CellTemplate,那么GridViewColumn将会使用DisplayMember而忽略CellTemplate。

6,代码

 public partial class MainWindow : Window{public MainWindow(){InitializeComponent();listview01.ItemsSource = DbStore.DAL.Factory.ProductsDal.QueryAll();combo01.SelectedIndex = 0;}private void combo01_Selected(object sender, RoutedEventArgs e){//获取选中的模式string str = combo01.SelectedItem.ToString();ViewBase view = this.Resources[str] as ViewBase;listview01.View = view;}}

7,Demo链接

https://download.csdn.net/download/lingxiao16888/89280022

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/10904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Arduino】delay()、millis() 时间函数

目录 1、延时函数 2、运行时间函数 3、不使用delay() 函数实现定时、等待 1、延时函数 通过延迟函数&#xff0c;我们可以实现LED灯以1S为间隔闪送。 void setup() {pinMode(LED_BUILTIN,OUTPUT); //定义引脚&#xff0c;告诉ESP8266那个引脚做什么用&#xff0c;模式是什…

Leetcode经典题目之用队列实现栈

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 目录 1、题目展示2、题目分析3、完整代码演示4、结语 1、题目展示 前面我们了解过如何实现队列…

unetr_plus_plus(UNETR++、nnU-Net)系列数据处理理解汇总

unetr_plus_plus&#xff08;UNETR、nnU-Net&#xff09;系列数据处理理解汇总&#xff0c;这是一个 3D 图像分割的任务系列集。 为什么说他们是一个系列集合呢&#xff1f;主要是因为&#xff1a; 论文的训练和评价数据集是一样的&#xff0c;都是来自于10全挑战赛&#xff…

第五百回 Get路由管理

文章目录 1. 概念介绍2. 使用方法2.1 普通路由2.2 命名路由 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示Dialog"相关的内容&#xff0c;本章回中将介绍使用get进行路由管理.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

掌握MySQL常用的命令

前言 MySQL是一个流行的开源关系型数据库管理系统&#xff0c;广泛应用于各种应用场景。熟练掌握MySQL的常用命令&#xff0c;对于数据库管理员和开发人员来说至关重要。本文将介绍MySQL数据库的一些基础术语、SQL语言分类&#xff0c;以及DDL、DML、DQL和DCL等操作&#xff0…

高并发场景

缓存穿透 定义 大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力 举个例子 某个黑客故意制造一些非法的 key 发起大量…

C++类与对象的一些练习

1.设计一个名为Rectangle的矩形类&#xff0c;其属性为矩形的长和宽&#xff0c;能计算和输出矩形的周长和面积。 class Rectangle { public:Rectangle(int c0,int k0):m_c(c),m_k(k){}int length()//周长{return 2 * (m_c m_k);}int area()//面积{return m_c * m_k;} privat…

如何优雅简单地写 Controller 层代码?

本篇就来介绍一下&#xff0c;如何写好一个 controller &#xff0c;让你的接口变的更加优雅&#xff01; 一个完整的后端请求由 4 部分组成&#xff1a; 接口地址&#xff08;也就是 URL 地址&#xff09; 请求方式&#xff08;一般就是 get、set&#xff0c;当然还有 put、…

算法-排序详解

目录 前言 比较排序 选择排序 插入排序 冒泡排序 归并排序 快速排序 非比较类排序 计数排序 桶排序 基数排序 排序的稳定性 排序算法的题目 前言 计算机的工作之一就是对数据的处理&#xff0c;处理数据有一个常见的操作就是对数据排序&#xff0c;比如新闻系统总…

Linux——进程间通信

目录 一、进程通信的初步认识 1.1 进程间通信目的 1.2 进程间通信的种类 管道&#xff08;Pipes&#xff09; System V IPC POSIX IPC 三、管道 3.1 知识铺垫 3.2 匿名管道 3.2.1 基本概念 3.2.2 测试用例&#xff1a; 3.3 管道的行为 3.4 命名管道 3.4.1 基本概念…

Django Admin后台管理:高效开发与实践

title: Django Admin后台管理&#xff1a;高效开发与实践 date: 2024/5/8 14:24:15 updated: 2024/5/8 14:24:15 categories: 后端开发 tags: DjangoAdmin模型管理用户认证数据优化自定义扩展实战案例性能安全 第1章&#xff1a;Django Admin基础 1.1 Django Admin简介 Dj…

手撕C语言题典——反转链表

目录 前言 一.思路 1&#xff09;创建新链表 2&#xff09;创建三个指针 二.代码实现 搭配食用更佳哦~~ 数据结构之单单单——链表-CSDN博客 数据结构之单链表的基本操作-CSDN博客 前面学了单链表的相关知识&#xff0c;我们来尝试做一下关于顺序表的经典算法题~ 前言 反转…

Github 2024-05-12 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Filament: 加速Laravel开发的完美起点 创建周期:1410 天开发语言:PHP协议类型:MIT LicenseStar数量:12228 个Fork数量:1990 次关…

Isaac Sim 4 键盘控制小车前进方向(学习笔记5.8.2)

写的乱糟糟&#xff0c;主要是这两周忘了记录了...吭哧吭哧往下搞&#xff0c;突然想起来要留档&#xff0c;先大致写一个&#xff0c;后面再往里添加和修改吧&#xff0c;再不写就全忘了 有一个一直没解决的问题&#xff1a; 在保存文件时出现问题&#xff1a;isaac sim mism…

Docker学习(带图详细)

一、安装docker 参考官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 查看系统版本 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# [rootlocalhost ~]# uname -a Linux localhost.localdomai…

Entity Framework Core中的延迟加载和即时加载

在Entity Framework Core&#xff08;EF Core&#xff09;中&#xff0c;延迟加载&#xff08;Lazy Loading&#xff09;和即时加载&#xff08;也称为早期加载或显式加载&#xff09;是两种主要的数据加载模式&#xff0c;它们在加载相关数据时有着不同的策略和优势。以下是这…

Leetcode 3145. Find Products of Elements of Big Array

Leetcode 3145. Find Products of Elements of Big Array 1. 解题思路2. 代码实现 题目链接&#xff1a;3145. Find Products of Elements of Big Array 1. 解题思路 这道题思路上还是比较直接的&#xff0c;就是实现上非常的繁琐&#xff0c;着实花了不少力气。 显然&…

vs code中如何使用git

由于本地代码有了一些储备&#xff0c;所以想通过网址托管形式&#xff0c;之前一直使用了github&#xff0c;但是鉴于一直被墙&#xff0c;无法登录账号&#xff0c;所以选择了国内的gitee来作为托管网站。 gitee的网址&#xff1a;Gitee - 基于 Git 的代码托管和研发协作平台…

C++11 新特性 decltype 说明符

一、typeof与typeid 1.1、typeof 在C11标准之前&#xff0c;GCC已经提供了一个类似功能的运算符 typeof对类型进行推导&#xff0c;但是这毕竟是编译器的实现&#xff0c;不是标准。 int a 0; typeof(a) b 5;1.2、typeid C标准提供了 typeid 运算符&#xff0c;获取的类型…

在另外一个页面,让另外一个页面弹框显示操作(调佣公共的弹框)

大概意思是&#xff0c;登录弹框在另外一个页面中&#xff0c;而当前页面不存在&#xff0c;在当前页面中判断如果token不存在&#xff0c;就弹框出登录的弹框 最后一行 window.location.href … 如果当前用户已登录&#xff0c;则执行后续操作(注意此处&#xff0c;可不要)