WPF MaterialDesign 初学项目实战(6):设计首页(2),设置样式触发器

news2024/11/24 23:10:16

原项目视频

WPF项目实战合集(2022终结版) 26P

源码地址

WPF项目源码

其他内容

WPF MaterialDesign 初学项目实战(0):github 项目Demo运行
WPF MaterialDesign 初学项目实战(1)首页搭建
WPF MaterialDesign 初学项目实战(2)首页导航栏样式
WPF MaterialDesign 初学项目实战(3)动态侧边栏
WPF MaterialDesign 初学项目实战(4)侧边栏路由管理
WPF MaterialDesign 初学项目实战(5):设计首页

环境搭建:

我想到WPF的环境搭建比较复杂,我之后的博客会把所有的环境写下来。

NuGet

在这里插入图片描述

命名空间:

//materialDesign,prism材质包
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
//点击反馈
xmlns:behaviors="http://schemas.microsoft.com/xaml/behaviors"
//引入prism
xmlns:prism="http://prismlibrary.com/"


//materialDesign 资源样式
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
TextElement.FontWeight="Regular"
TextElement.FontSize="13"
TextOptions.TextFormattingMode="Ideal"
TextOptions.TextRenderingMode="Auto"
Background="{DynamicResource MaterialDesignPaper}"
FontFamily="{DynamicResource MaterialDesignFont}"

本期目标

新建列表

动态生成列表,其实都是老一套方法了。

引用
声明List<实体>
数据对象绑定
Binding对应属性
C#新建实体类
ViewModels
View
DateTemplate
最终页面显示

看一下布局
在这里插入图片描述
在这里插入图片描述
解析一下页面布局

  • Gird(灰):分成左右两个
    • DockPanel(红):显示标题和按钮
    • ListBox(蓝):显示信息列表

然后就是类的继承关系:

Item基类
待办事项Item
备忘事项Item

代码:

  public class ItemBase
    {
        public int Id { get; set; }

        public DateTime CreateDate { get; set; }

        public DateTime UpdateTime { get; set; }

        
    }
    public class ToDoItem : ItemBase
    {

        public string? Title { get; set; }

        public string? Content { get; set; }

        public int Status { get; set; }


    }
    public class MemoItem :ItemBase
    {
        public string? Title { get; set; }

        public string? Content { get; set; }

        public int status { get; set; }
    }

声明变量


    public class IndexViewModel : BindableBase
    {
        public IndexViewModel()
        {
  			.......
            ToDoItems = new ObservableCollection<ToDoItem> ();
            MemoItems = new ObservableCollection<MemoItem> ();
            
            
            Create_ToDo_Test();

        }
		.......

        private ObservableCollection<ToDoItem> toDoItems;
        public ObservableCollection<ToDoItem> ToDoItems
        {
            get { return toDoItems; }
            set { toDoItems = value; RaisePropertyChanged(); }
        }

        private ObservableCollection<MemoItem> memoItems;

        public ObservableCollection<MemoItem> MemoItems
        {
            get { return memoItems; }
            set { memoItems = value; RaisePropertyChanged(); }
        }


        void Create_ToDo_Test()
        {
            for(int i = 0; i < 10; i++)
            {
                ToDoItems.Add(new ToDoItem() { Title = "todo标题"+i, Content = "todoContent" });
                MemoItems.Add(new MemoItem() { Title = "Memo标题"+i , Content = "MemoContent"});
            }

        }
    }

在ViewIndex里面引用

<Grid Grid.Row="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Border Margin="10"
                    CornerRadius="4"
                    Opacity="0.1"
                    Background="#BEBEBE" />

            <StackPanel Margin="15">
                <DockPanel LastChildFill="False">
                    <TextBlock Text="代办事项"
                               FontSize='30'
                               FontWeight="Bold" />

                    <Button DockPanel.Dock="Right"
                            VerticalAlignment="Top"
                            Margin="0,0,10,0"
                            Width="35"
                            Height="35"
                            Style="{StaticResource MaterialDesignFloatingActionAccentButton}">
                        <materialDesign:PackIcon Kind="Add" />
                    </Button>
                </DockPanel>
                <ListBox  ItemsSource="{Binding ToDoItems}"  Height="380"
                          Cursor="" ScrollViewer.VerticalScrollBarVisibility="Disabled">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Cursor="Hand">
                                <TextBlock Text="{Binding Title}" FontSize="18" />
                                <TextBlock Text="{Binding Content}" Opacity="0.5" Margin="5,5,0,0"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>


            <Border Margin="10"
                    CornerRadius="4"
                    Opacity="0.1"
                    Grid.Column="1"
                    Background="#BEBEBE" />

            <StackPanel Margin="15"
                        Grid.Column="1">
                <DockPanel LastChildFill="False">
                    <TextBlock Text="备忘录"
                               FontSize='30'
                               FontWeight="Bold" />

                    <Button DockPanel.Dock="Right"
                            VerticalAlignment="Top"
                            Margin="0,0,10,0"
                            Width="35"
                            Height="35"
                            Style="{StaticResource MaterialDesignFloatingActionAccentButton}">
                        <materialDesign:PackIcon Kind="Add" />
                    </Button>


                </DockPanel>
                <ListBox  ItemsSource="{Binding MemoItems}"
                          Height="380"
                          Cursor=""
                          ScrollViewer.VerticalScrollBarVisibility="Disabled"
                          >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Title}"
                                           FontSize="18" />
                                <TextBlock Text="{Binding Content}"
                                           Opacity="0.5"
                                           Margin="5,5,0,0" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </Grid>

实现效果:

在这里插入图片描述
数据绑定使用频率较高,之后不再详细描述代码。毕竟做笔记的目的不是把全部都记下来,是把不会的记下来。

如何设置触发器

触发器的设置顺序

  • TargetType:触发源,例如border
    • Tiggers
      • Tigger Property+value:触发事件,例如border边框鼠标滑动事件
        • Setter :触发结果
          • Setter.value:有些触发结果要搭配Setter设定返回值

示例代码,鼠标滑动边框发光

<!--声明触发器对象-->
        <Style TargetType="Border">
            <!--声明触发器-->
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                         Value="True">
                    <Setter Property="Effect">
                        <Setter.Value>
                            <DropShadowEffect Color="#DDDDDD"
                                              ShadowDepth="2"
                                              BlurRadius="10" />
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>

实现效果:

在这里插入图片描述

结尾

我现在基础掌握的差不多了,之后的项目代码只挑选难点进行描述,简单重复的地方我就跳过了。如果想要源码的可以去B站视频上面去找源码

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

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

相关文章

npm、cnpm、yarn、pnpm区别以及pnpm 是凭什么对 npm 和 yarn 降维打击的

安装 1、安装npm需要安装nodejs&#xff0c;node中自带npm包管理器 node下载地址&#xff1a;node.js 2、cnpm安装&#xff08;需要安装npm&#xff09; cnpm是淘宝团队做的npm镜像&#xff0c;淘宝镜像每 10分钟 进行一次同步以保证尽量与官方服务同步。 npm install -g …

secure CRT 自定义主题

文章目录 如何切换 SecureCRT 主题如何新建SecureCRT 主题如何拷贝我的主题,主题名为pic如何设置 SecureCRT 关键字高亮 如何切换 SecureCRT 主题 SecureCRT 自带主题 选择 options -> Edit Default Session -> Terminal -> Emulation -> Terminal xterm optio…

【Linux】-vim的介绍,教你手把手使用vim

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…

一台电脑同时安装多个tomcat服务器教程,window同时安装tomcat7、tomcat8、tomcat9三个服务器教程

一台电脑同时安装多个tomcat服务器 . 介绍 A. 解释为什么有时需要同时安装多个Tomcat服务器 应用程序隔离&#xff1a;当你需要在同一台设备上运行多个独立的应用程序时&#xff0c;每个应用程序可能需要使用不同的Tomcat配置和环境。通过同时安装多个Tomcat服务器&#xff0…

车载以太网 - SomeIP - 协议用例 - Messages_02

目录 13.1、验证SomeIP-SD中订阅报文Subscribe和SubscribeAck中IPv4 Endpoint Option中ServiceID一样

【JAVA进阶】Stream流

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;JAVASE基础 目录 1.Stream流的概述 2.Stream流的获取 3.Stream流的常用方法 1.Stream流的概述 什么是Stream流&#xff1f; 在Java 8中&#xff0c;得益于Lambda所带来的函数式编程&#xff0…

HNU数据结构与算法分析-作业4-图结构

1. (简答题) 【应用题】11.3 &#xff08;a&#xff09;画出所示图的相邻矩阵表示 &#xff08;b&#xff09;画出所示图的邻接表表示 &#xff08;c&#xff09;如果每一个指针需要4字节&#xff0c;每一项顶点的标号占用2字节&#xff0c;每一条边的权需要2字节&#xff0…

计算机体系结构存储系统

存储系统原理 两种典型的存储系统&#xff1a;Cache存储系统和虚拟存储系统。前者主要目的是提高存储器速度&#xff0c;后者有主存储器和硬盘构成&#xff0c;主要用于扩大存储器容量。 存储系统的访问效率 e T 1 T 1 H ( 1 − H ) T 2 T 1 f ( H , T 2 T 1 ) e\frac{T_…

魔改车钥匙实现远程控车:(4)基于compose和经典蓝牙编写一个控制APP

前言 这篇文章不出意外的话应该是魔改车钥匙系列的最后一篇了&#xff0c;自此我们的魔改计划除了最后的布线和安装外已经全部完成了。 不过由于布线以及安装不属于编程技术范围&#xff0c;且我也是第一次做&#xff0c;就不献丑继续写一篇文章了。 在前面的文章中&#xf…

基于torch实现模型剪枝

一、剪枝分类 所谓模型剪枝&#xff0c;其实是一种从神经网络中移除"不必要"权重或偏差&#xff08;weigths/bias&#xff09;的模型压缩技术。关于什么参数才是“不必要的”&#xff0c;这是一个目前依然在研究的领域。 1.1、非结构化剪枝 非结构化剪枝&#xff08;…

什么是可持续能源?

随着全球经济的不断发展和人口的不断增长&#xff0c;能源问题越来越受到关注。传统能源已经不能满足人们对能源的需求&#xff0c;同时也对环境和健康带来了严重的影响。为了解决这些问题&#xff0c;出现了可持续能源的概念。那么&#xff0c;什么是可持续能源呢&#xff1f;…

逐渐从土里长出来的小花

从土里逐渐长出来的小花&#xff08;这是长出来后的样子&#xff0c;图片压缩了出现了重影~&#xff09; 代码在这里&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title&g…

MySQL-索引(2)

本文主要讲解MySQL-索引相关的知识点 联合索引前缀索引覆盖索引索引下推索引的优缺点什么时候适合创建索引,什么时候不适合?如何优化索引 ? 索引失效场景 ? 为什么SQL语句使用了索引,却还是慢查询 ? 使用索引有哪些注意事项 ? InnoDB引擎中的索引策略 目录 联合索引 联合…

LeetCode高频算法刷题记录6

文章目录 1. 编辑距离【困难】1.1 题目描述1.2 解题思路1.3 代码实现 2. 寻找两个正序数组的中位数【困难】2.1 题目描述2.2 解题思路2.3 代码实现 3. 合并区间【中等】3.1 题目描述3.2 解题思路3.3 代码实现 4. 爬楼梯【简单】4.1 题目描述4.2 解题思路4.3 代码实现 5. 排序链…

chatgpt赋能Python-python3_9安装numpy

Python 3.9 安装 NumPy 的完整指南 Python是一种功能强大的编程语言&#xff0c;已成为数据分析、人工智能和科学计算领域的主流语言之一。NumPy是一个Python库&#xff0c;用于执行高效的数值计算和科学计算操作。Python 3.9是Python最新版本&#xff0c;带来了许多新功能和改…

一款非常有趣的中国版本的Excalidraw作图工具drawon(桌案)

桌案工具集成了很多有趣的在线作图工具&#xff0c; 思维导图&#xff0c; 流程图&#xff0c;以及草图&#xff0c;在线ppt等功能。 而草图是基于国外有名的Excalidraw而改造而来&#xff0c;使得它更符合国人的使用习惯。 最近在 使用excalidraw时&#xff0c;发现了很多新功…

Excel | 基因名都被Excel篡改了怎么办呢!?~(附3种解决方案)

1写在前面 今天和大家分享一下在做表达矩阵处理时尝尝会遇到的一个问题&#xff0c;但又经常被忽视&#xff0c;就是Excel会修改你的基因名。&#x1f637; 无数大佬在这里都踩过坑&#xff0c;这些普遍的问题已经被写成了paper&#xff08;左右滑动&#xff09;&#xff1a;&a…

75.建立一个主体样式第一部分

我们的目标如下图所示 ● 首先建立文件夹&#xff0c;生成框架代码 ● 把页面上面的HTML元素写进去 <header><nav><div>LOGO</div><div>NAVIGATION</div></nav><div><h1>A healty meal delivered to your door, ever…

Java基础--->并发部分(2)【Java中的锁】

文章目录 synchronized和ReentrantLock的区别Java中锁的名词synchronized锁ReentrantLock锁 synchronized和ReentrantLock的区别 synchronized 和 ReentrantLock 都可以用来实现 Java 中的线程同步。它们的作用类似&#xff0c;但是在用法和特性上还是有一些区别的。 synchroni…

【2023/05/20】Visual Basic

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第15天。 Visual Basic是一种广泛应用于Windows操作系统的编程语言&#xff0c;它是Microsoft公司开发的一种面向对象的编程语言&#xff0c;以其简单、易学、易用的特点受到广泛欢迎。本文旨在介绍Visual…