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

news2025/1/11 6:32:39

原项目视频

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站视频上面去找源码。

后来我想了一下,笔记重要的是笔记,而不是重复的工作。这个项目实战的笔记到此为止了。后面只会更新WPF的具体难点的解决。

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

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

相关文章

微服务开发系列 第五篇:Redis

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

STL-常用算法(二.拷贝 替换 算术 集合)

开篇先附上STL-常用算法(一)的链接 STL-常用算法&#xff08;一.遍历 查找 排序&#xff09;_小梁今天敲代码了吗的博客-CSDN博客 目录 常用拷贝和替换算法&#xff1a; copy函数示例&#xff1a;&#xff08;将v1容器中的元素复制给v2&#xff09; replace函数示例&#…

06:冯诺依曼计算机

布尔代数&#xff1a;是现代电子计算机的数学和逻辑基础 ---------- 布尔代数与开关电路&#xff1a; ---------- 1945年&#xff1a;冯诺依曼101报告 硬件&#xff0c;操作系统软件、防病毒软件、办公软件、日程生活娱乐软件...... 冯诺依曼体系结构&#xff1a; 算术逻辑单…

chatgpt赋能Python-python_pu__

Python pu()函数介绍及使用方法 在Python编程中&#xff0c;pu()函数是一个常用的输出函数&#xff0c;可以将输出的内容打印到控制台上。在这篇文章中&#xff0c;我们将探讨pu()函数的具体用法以及它在Python编程中的实际应用。 什么是pu()函数 pu()函数是Python标准库中的…

Nacos、Eureka和Zookeeper有什么区别

Nacos、Eureka和Zookeeper都是服务注册中心&#xff0c;它们的主要功能是管理分布式系统中各个微服务实例的注册与发现。它们之间的主要区别在于&#xff1a; 1. 语言支持&#xff1a;Nacos是用Java语言开发的&#xff0c;Eureka是用Java语言开发的&#xff0c;Zookeeper则是用…

MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计

导航&#xff1a; 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 8. 优先考虑覆盖索引 8.1 什么是覆盖索引&#xff1f; 8.1.0 概念 8.0.1 覆盖索引情况下&#xff0c;“不等于”…

chatgpt赋能Python-python_pythoncom

Python与Pythoncom&#xff1a;为您的SEO提供强大的支持 Python是一种经过广泛应用的高级编程语言&#xff0c;可用于多种应用程序的开发&#xff0c;包括爬虫、机器学习、数据分析、Web开发等等。而Pythoncom则是用于与Windows系统进行交互的Python模块&#xff0c;可以实现与…

小航编程题库机器人等级考试理论一级(2022年12月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题下列哪个是机器人?&#xff08; &#xff09; A、aB、bC、cD、d 答案解析&#xff1a; 单选题…

小航编程题库机器人等级考试理论一级(2022年6月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:D 第1题下列哪个选项属于机器人&#xff1f;&#xff08;?&#xff09; A、aB、bC、cD、d 答案解析&a…

MySQL第一章、MySQL安装与配置

目录 一、数据库介绍 1.1什么是数据库 1.2数据库分类 1.3数据库编程 1.4其他客户端 ​1.5MySQL总结 一、数据库介绍 1.1什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数…

chatgpt赋能Python-python_plup

Python Plug-In: 如何让你的Python代码更加高效&#xff1f; Python是一种高级编程语言&#xff0c;它的代码易于阅读和编写&#xff0c;通常是程序员的首选语言之一。但是&#xff0c;Python本身并不能满足所有需求&#xff0c;如果需要做一些复杂的任务&#xff0c;就需要使…

物联网应用的全球最低功耗无线芯片——芝麻芯片和大米天线

今天的内容是两则科技新闻&#xff0c;“用于物联网应用的全球最低功耗的无线芯片”&#xff0c;和“一款多频段微型芯片天线”。由于芯片的面积分别为1平方毫米&#xff0c;和21平方毫米&#xff0c;差不多是1粒芝麻和2粒大米的大小&#xff0c;故称为芝麻芯片和大米天线。 0…

easypan部署记录

文章目录 项目部署学习链接1.安装ffmpeglinux centos下安装ffmpeg的详细教程 2. springboot maven 多环境配置文件pom.xmlapplication.propertiesapplication-dev.propertiesapplication-prod.propertieslogback.xml 3. 配置nginx配置要点nginx配置 4. 启动项目5.访问 项目部署…

Java --- 云尚办公之权限管理模块

目录 一、权限管理 二、JWT 三、用户登录功能实现 四、用户登录后的信息 五、前端代码 六、spring-security 6.1、用户认证 6.2、用户授权 一、权限管理 粗粒度权限&#xff1a; 不同用户进入系统&#xff0c;因权限不同看到菜单不同 细粒度权限&#xff1a; 在一个页…

一、尚医通平台前端搭建

文章目录 一、尚医通平台前端搭建1、服务端渲染技术NUXT 二、首页实现1、公共处理1.1添加静态资源1.2 定义布局1.2.1 修改默认布局1.2.2 提取头文件1.2.3 提取尾文件1.2.4 默认布局引入头尾文件 2、首页引入2.1 引入首页静态页面2.2 首页数据分析 3、首页数据api接口3.1 医院分…

chatgpt赋能Python-python_penup怎么用

Python Penup - 内在交互性的有用工具 Python编程语言的流行一直与其灵活性和易于使用性息息相关。除此之外&#xff0c;Python还提供了大量的扩展和库&#xff0c;以满足各种编程需求。Penup是Python编程中一个非常有用的工具。 什么是Python Penup&#xff1f; Penup是Pyt…

windows环境下安装RabbitMQ(超详细),

windows环境下安装RabbitMQ&#xff08;超详细&#xff09; 注&#xff1a;安装路径&#xff0c;用户名均为英文 一、RabbitMq简介 1.1消息队列中间件简介 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题…

Discourse 如何配置 MAXMIND 来对 IP 地址反向查询

【配置 MAXMIND&#xff0c;Discourse 需要重新构建&#xff0c;这将会导致服务中断。 】 什么是 MAXMIND 和为什么我们需要使用这个服务 Discourse 使用 MAXMIND 来通过 IP 地址反向查询具体的物理地址。 如果 Discourse 没有配置 Maxmind’s 数据库&#xff0c;我们看到的配…

leetcode 数据库题 196,197,262,511,550,570

leetcode 数据库题第二弹 196. 删除重复的电子邮箱197. 上升的温度262. 行程和用户511. 游戏玩法分析 I550. 游戏玩法分析 IV570. 至少有5名直接下属的经理577. 员工奖金小结 196. 删除重复的电子邮箱 题目地址&#xff1a;https://leetcode.cn/problems/delete-duplicate-emai…

二、服务网关-Gateway

文章目录 一、服务网关1、网关介绍2、Spring Cloud Gateway介绍3、搭建server-gateway模块3.1 搭建server-gateway3.2 修改配置pom.xml3.3 在resources下添加配置文件3.4添加启动类3.5 跨域处理3.5.1 为什么有跨域问题&#xff1f;3.5.2解决跨域问题 3.6服务调整3.7测试 一、服…