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

news/2025/2/27 20:15:53/

原项目视频

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.ppmy.cn/news/76024.html

相关文章

如何做出有价值的知识管理文档?

知识管理文档是企业中重要的资产&#xff0c;它可以帮助企业员工更好地理解业务流程、产品功能、标准操作等信息。如何做出有价值的知识管理文档&#xff0c;满足员工知识需求&#xff0c;提高工作效率&#xff0c;本文将探讨以下几个方面&#xff1a; 一、制定有效的知识管理…

【C++】C++泛型编程 | 模板初阶

&#x1f9d1;‍&#x1f393;个人主页&#xff1a;简 料 &#x1f3c6;所属专栏&#xff1a;C &#x1f3c6;个人社区&#xff1a;越努力越幸运社区 &#x1f3c6;简 介&#xff1a;简料简料&#xff0c;简单有料~在校大学生一枚&#xff0c;专注C/C/GO的干货分…

C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) C服务器开发1——项目介绍/分布式/#ifndef与#pragma once 项目介绍分布式#ifndef与#pragma once 最近开始学习下C的项目开发&#xff0c;找了很多…

ROS 工作空间与功能包的创建(三)

执行命令&#xff1a; mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src/catkin_init_workspace echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 效果&#xff1a; 输入命令查看添加成功了没有 tail ~/.bashrc 编译工程&#xff1a;执行命令 cd ~…

时代浪潮已经袭来 AI人工智能频频爆火 ChatGPT改变行业未来

目录 1 人工智能的发展 1.1人工智能发展历程 1.1.1 人工智能的起源 1.1.2 人工智能发展的起起伏伏 1.1.3 人工智能多元化 2 什么是ChatGPT 2.1 ChatGPT的主要功能 2.2ChatGPT对企业的多种优势 2.3 不必担心ChatGPT带来的焦虑 3 人工智能对行业未来的影响 3.1 人工智…

KDZK-F励磁综合特性测试仪

一、产品概述 KDZK-F励磁综合特性测试仪是判断发电机转子绕组有无匝间短路的专用仪器&#xff0c;可以自动、手动&#xff08;单向或双向&#xff09;测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标&#xff0c;操作更方便。 可选择快速的自…

当云技术与 Serverless 遇见容器,云计算迎来新的弹性伸缩时代

随着云计算技术的不断发展&#xff0c;Serverless 和容器已经成为了云计算部署应用的两大法宝。容器技术的发展历程中&#xff0c;业界普遍将 2014 年视为重要的时间节点&#xff0c;这一年&#xff0c;Docker 公司正式发布了 Docker 镜像&#xff0c;并开源了容器引擎。紧接着…

发挥CWPP在零售行业安全关键价值

新钛云服已累计为您分享747篇技术干货 CWPP产品对于零售行业安全有关键价值&#xff0c;可以极大提升零售行业安全水平&#xff0c;是零售行业必备的安全产品。 零售行业的特点 零售行业的特点是实时在线、数据有独特价值&#xff0c;安全挑战是缺乏安全投入和人员。 实时在线方…