当前位置: 首页 > news >正文

【C# WPF WeChat UI 简单布局】

创建WPF项目

VS创建一个C#的WPF应用程序:
在这里插入图片描述创建完成后项目目录下会有一个MainWindow.xaml文件以及MainWindow.cs文件,此处将MainWindow.xaml文件作为主页面的布局文件,也即为页面的主题布局都在该文件进行。

布局和数据

在这里插入图片描述

主体布局

Wechat的布局可暂时分为三列,
第一列为菜单区域,
第二列为消息列表区域,
第三列为消息内容区域。所以此处必然要用<Grid/ >组件。

<Grid Background="White"><Grid.ColumnDefinitions><!-- 菜单宽度自适应 --><ColumnDefinition Width="Auto"/><ColumnDefinition Width="Auto"/><!-- 内容区填满剩余空间 --><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Grid Grid.Column="0" Background="Gray"></Grid><!--消息列表--><Grid Grid.Column="1"></Grid><Grid Grid.Column="2"></<Grid>
<Grid/>

菜单布局

  1. 菜单栏的顶部有图像,
  2. 菜单按钮分为上下两部分,

可将菜单区域分为两部分,上部分为图像,下部分为菜单按钮,使用<Grid/ >组件。
图像可使用<Borde / >包裹,
菜单按钮可使用<DockPanel/ >包裹,
菜单按钮分为上下两部分,正好分别放置在<DockPanel/ >的Top和Bottom位置。

<Grid Grid.Column="0" Background="Gray"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Border Grid.Row="0" Height="60"><Image Source="Images/kun.png"  Height="35" Margin="0,15,0,5"/></Border><DockPanel Grid.Row="1" LastChildFill="False" Width="45" Background="Gray"><Menu DockPanel.Dock="Top" Width="45" Background="Transparent"></Menu><Menu DockPanel.Dock="Bottom" Width="45" Background="Transparent"></Menu></DockPanel>
<Grid/>

在Menu中填充合适的Item,因为菜单按钮为Icon,所以需要下载合适的图片

<Menu DockPanel.Dock="Top" Width="45" Background="Transparent"><MenuItem Height="45" Width="45" Click="MenuItem_Click1" ><MenuItem.Header><Image Source="Images/icon001.png"  Height="25" Margin="4,0,0,0"/></MenuItem.Header></MenuItem><MenuItem Height="45" Width="45" Click="MenuItem_Click2" ><MenuItem.Header><Image Source="Images/icon002.png"  Height="25" Margin="4,0,0,0"/></MenuItem.Header></MenuItem><MenuItem Height="45" Width="45" Click="MenuItem_Click3"><MenuItem.Header><Image Source="Images/icon003.png"  Height="25" Margin="4,0,0,0"/></MenuItem.Header></MenuItem><MenuItem Height="45" Width="45" Click="MenuItem_Click4"><MenuItem.Header><Image Source="Images/icon009.png"  Height="25" Margin="4,0,0,0"/></MenuItem.Header></MenuItem>
</Menu><Menu DockPanel.Dock="Bottom" Width="45" Background="Transparent"><MenuItem Height="45" Width="45" Click="MenuItem_Click5"><MenuItem.Header><Image Source="Images/icon006.png"  Height="25" Margin="4,0,0,0"/></MenuItem.Header></MenuItem><MenuItem Height="45" Width="45" Click="MenuItem_Click5" Margin="0,0,0,15"><MenuItem.Header><Image Source="Images/icon005.png"  Height="25" Margin="4,0,0,0"/></MenuItem.Header></MenuItem>
</Menu>

消息列表处放置一个Frame组件,因为点击不同按钮时显示的内容不同,需要根据按钮点击来选择显示内容。

<!--消息列表-->
<Grid Grid.Column="1"><Frame Name="mainFrame" NavigationUIVisibility="Hidden" />
</Grid>

Frame自带导航按钮,通过属性

NavigationUIVisibility="Hidden"

隐藏。

自带的系统窗口按钮可去掉,使用自定义的。

<Window x:Class="WeChat.MainWindow"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:local="clr-namespace:WeChat"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"WindowStyle="None"AllowsTransparency="True" Background="Transparent"OpacityMask="White"MouseMove="Move_MouseMove"Icon="Images/favicon.ico">

在其中加入了以下代码:

 WindowStyle="None"AllowsTransparency="True" Background="Transparent"OpacityMask="White"MouseMove="Move_MouseMove"

将内容显示区域分为上下两部分,一部分固定为自定义的窗口按钮,一部分为显示数据区域,
使用 <Grid/ >组件

<Grid Grid.Column="2"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><!--自定义系统菜单 --><Border Grid.Row="0" Background="White" BorderThickness="0,0,0,0" BorderBrush="WhiteSmoke"></Border><!--内容 --><ContentControl Grid.Row="1" Margin="0" x:Name="contentArea"/>
</Grid>

主体布局完毕,
在这里插入图片描述

在这里插入图片描述

MainWindow.xaml<Window x:Class="WeChat.MainWindow"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:local="clr-namespace:WeChat"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"WindowStyle="None"AllowsTransparency="True" Background="Transparent"OpacityMask="White"MouseMove="Move_MouseMove"Icon="Images/favicon.ico"><Grid Background="White"><Grid.ColumnDefinitions><!-- 菜单宽度自适应 --><ColumnDefinition Width="Auto"/><ColumnDefinition Width="Auto"/><!-- 内容区填满剩余空间 --><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Grid Grid.Column="0" Background="Gray"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Border Grid.Row="0" Height="60"><Image Source="Images/kun.png"  Height="35" Margin="0,15,0,5"/></Border><DockPanel Grid.Row="1" LastChildFill="False" Width="45" Background="

相关文章:

【C# WPF WeChat UI 简单布局】

创建WPF项目 VS创建一个C#的WPF应用程序: 创建完成后项目目录下会有一个MainWindow.xaml文件以及MainWindow.cs文件,此处将MainWindow.xaml文件作为主页面的布局文件,也即为页面的主题布局都在该文件进行。 布局和数据 主体布局 Wechat的布局可暂时分为三列, 第一列为菜…...

关于docker的几个概念(二)

目录 1. 为何Docker CentOS镜像比传统CentOS镜像小得多&#xff1f;2. 镜像的分层结构及其优势3. 讲一下容器的copy-on-write特性&#xff0c;修改容器里面的内容会修改镜像吗&#xff1f;4. 简单描述一下Dockerfile的整个构建镜像过程 1. 为何Docker CentOS镜像比传统CentOS镜…...

JAVA集中学习第五周学习记录(一)

系列文章目录 第一章 JAVA集中学习第一周学习记录(一) 第二章 JAVA集中学习第一周项目实践 第三章 JAVA集中学习第一周学习记录(二) 第四章 JAVA集中学习第一周课后习题 第五章 JAVA集中学习第二周学习记录(一) 第六章 JAVA集中学习第二周项目实践 第七章 JAVA集中学习第二周学…...

JavaSE 网络编程

什么是网络编程 计算机与计算机之间通过网络进行数据传输 两种软件架构 网络编程3要素 IP IPv4 IPv6 Testpublic void test01() throws UnknownHostException { // InetAddress.getByName 可以是名字或ipInetAddress address InetAddress.getByName("LAPTOP-7I…...

ubuntu24.04 编译安装PHP7.4

ubuntu24.04 编译安装PHP7.4 先安装依赖包&#xff08;原本是centos上安装依赖&#xff0c;让chatgpt转换了下对应的ubutnu下包名&#xff0c;如果编译过程有缺失&#xff0c;按报错提示再安装下&#xff09; apt install zlib1g zlib1g-dev libpcre3 libpcre3-dev libfreety…...

Tied and Anchored Stereo Attention Network for Cloud Removal in Optical

论文名称 基于固定锚定立体注意力网络的光学遥感图像去云方法代码运行 论文代码 https://github.com/ningjin00/TASANet?tabreadme-ov-file 论文地址 1环境创建 模型环境给了这几个包&#xff0c;如果你自带环境 那就运行代码 提示缺哪个装哪个 python 3.12rasterio 1.3.10…...

云开发微信小程序--即时聊天(单人聊天,多人聊天室)

云开发微信小程序–即时聊天 介绍&#xff1a;本小程序包含欢迎界面&#xff0c;注册&#xff0c;登录&#xff0c;一对一聊天&#xff0c;群聊&#xff0c;好友添加请求验证过程&#xff0c;修改好友备注以及删除好友&#xff0c;退出群聊&#xff0c;特殊角色卡片展示&#…...

Leetcod编程基础0到1-基础实现内容(个人解法)(笔记)

以下为个人解法&#xff0c;欢迎提供不同思路 1768. 交替合并字符串 题目&#xff1a;给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾&…...

仲阳天王星运维实习一面

自我介绍&#xff1f; 略谈谈你对“仲阳天王星”的理解&#xff1f; 略实习时间怎么安排&#xff0c;后续时间是怎么规划的&#xff1f; 略给你一个装满水的8升满壶和两个分别是5升、3升的空壶&#xff0c;请想个办法&#xff0c;使得其中一个水壶恰好装4升水&#xff0c;每一步…...

排序算法详解

​ &#x1f48e;所属专栏&#xff1a;数据结构与算法学习 &#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f341;1. 插入排序 &#x1f341;1.1 直接插入排序 插入排序是一种简单直观的排序算法&#xff0c;它的原理是通过构建有序序列&#xff0c;对于未排序数…...

vxe-table树形结构使用setCheckboxRow卡顿--已解决

项目场景&#xff1a; vxe-table树形结构使用setCheckboxRow进行部分节点选中 问题描述 vxe-table树形结构使用setCheckboxRow&#xff0c;在数据较多时卡顿 原因分析&#xff1a; setCheckboxRow内部进行了多次的循环遍历&#xff0c;导致速度慢 解决方案&#xff1a; 设…...

配置错误和 IAM 弱点是云安全的主要隐患

根据云安全联盟发布的《2024 年云计算最大威胁》报告&#xff0c;通常与云服务提供商 (CSP) 相关的传统云安全问题的重要性正在持续下降。 配置错误、IAM 弱点和 API 风险仍然至关重要 这些发现延续了 2022 年报告中首次发现的轨迹&#xff0c;同时&#xff0c;诸如错误配置的…...

Redis系列之Redis Cluster

概述 Redis 2.8版本发布稳定版Redis Sentinel&#xff0c;不过Sentinel集群版存在一些问题&#xff1a; 高可用性&#xff1a;Sentinel集群对Redis既有的主从集群提供有限的高可用保障&#xff1b;在线扩容&#xff1a;节点下线&#xff0c;触发选举&#xff0c;选举涉及两个…...

网站证书过期导致WordPress后台无法登录问题解决,页面样式丢失

1、首先打开网站目录文件\wp-includes\functions.php&#xff0c;找到代码&#xff0c;应该就是就在在第8行。 require( ABSPATH . WPINC . /option.php ); 在下面添加以下代码&#xff0c;作用就是把http替换为https add_filter(script_loader_src, agnostic_script_loader…...

LeetCode刷题笔记第191题:位1的个数

LeetCode刷题笔记第191题&#xff1a;位1的个数 题目&#xff1a; 想法&#xff1a; 通过位运算判断二级制形式中有多少个1&#xff0c;代码及解释如下&#xff1a; class Solution:def hammingWeight(self, n: int) -> int:return sum(1 for i in range(32) if n & …...

C语言—函数栈帧

函数&#xff0c;一般都有返回值&#xff0c;函数名&#xff0c;参数&#xff0c;再下来还有什么mian函数&#xff0c;函数写出来就是要被调用的&#xff0c;上面图片上的代码&#xff0c;main函数和myadd函数&#xff0c;都要在自己的栈结构什么形成自己的栈&#xff0c;可以帮…...

IDEA 2022.1.4用前需知

目录 一、配置国内源 二、正确再次创建新项目方式 IDEA 2022.1.4下载地址 一、配置国内源 1、查看本地仓库地址 2、设置国内源-添加Setting.xml文件内容 3、修改目录&#xff08;考虑到当前硬盘空间大小&#xff0c;英文目录名&#xff09; 1&#xff09;创建你要移动过去…...

Python数据可视化案例——折线图

目录 json介绍&#xff1a; Pyecharts介绍 安装pyecharts包 构建一个基础的折线图 配置全局配置项 综合案例&#xff1a; 使用工具对数据进行查看 &#xff1a; 数据处理 json介绍&#xff1a; json是一种轻量级的数据交互格式&#xff0c;采用完全独立于编程语言的文…...

Ubuntu虚拟机安装及汉化

一、安装 1.勾选典型(推荐)(T)——点击下一步 2.点击浏览找到光盘映像文件打开&#xff08;此文件很重要安装好后安装包不要卸载&#xff0c;放在不容易被删除的地方&#xff09;——点击下一步 3.将信息补充完整——点击下一步 4.点击浏览选择要将虚拟机安装在哪个路径&…...

记2024-08原生微信小程序开发

继2024.08 最近需要开发一个微信小程序的一个功能模块&#xff0c;但是之前在学的时候都是好几年前的东东了&#xff0c;然后重新快速过了一遍b站大学的教程&#xff0c;这篇文章就是基于教程进行的一些总结&#xff0c;和自己开发过程当中使用到的一些点和一些技巧什么的吧。 …...

构建本地化个人助理系统:事件驱动架构与模块化设计实践

1. 项目概述&#xff1a;一个高度可定制的个人助理系统最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Personal-Assistant”&#xff0c;作者是idk-man69。光看名字&#xff0c;你可能会觉得这又是一个类似Siri或Google Assistant的语音助手&#xff0c;但点进去仔细研…...

DLSS Swapper终极指南:免费开源工具让游戏DLSS管理变得简单快速

DLSS Swapper终极指南&#xff1a;免费开源工具让游戏DLSS管理变得简单快速 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 如果你正在寻找一款能够智能管理游戏DLSS、FSR和XeSS文件的免费开源工具&#xff0c;那么DLS…...

Sketchfab数据提取终极指南:打破在线3D模型下载壁垒的完整解决方案

Sketchfab数据提取终极指南&#xff1a;打破在线3D模型下载壁垒的完整解决方案 【免费下载链接】sketchfab sketchfab download userscipt for Tampermonkey by firefox only 项目地址: https://gitcode.com/gh_mirrors/sk/sketchfab 你是否曾在Sketchfab上发现完美的3D…...

Forge模组开发效率提升:Gradle插件自动化构建与热部署实践

1. 项目概述&#xff1a;一个为Forge模组开发者准备的“瑞士军刀”如果你是一名Minecraft Forge模组的开发者&#xff0c;或者你正打算踏入这个充满创造力的领域&#xff0c;那么你大概率经历过这样的场景&#xff1a;为了测试一个简单的功能改动&#xff0c;你需要反复地执行g…...

Vircadia Native Core:开源虚拟世界服务器核心架构与部署实战

1. 项目概述&#xff1a;一个开源虚拟世界的“引擎心脏”如果你对构建一个属于自己的、去中心化的虚拟世界&#xff08;Metaverse&#xff09;感兴趣&#xff0c;或者你正在寻找一个能支撑起大规模、高自由度社交与协作应用的底层平台&#xff0c;那么Vircadia Native Core绝对…...

从零打造会“看”的电子眼:Teensy与OLED的嵌入式图形与传感器实践

1. 项目概述&#xff1a;打造一个会“看”的电子生命体几年前&#xff0c;我第一次在创客社区看到“Uncanny Eyes”项目时就被深深吸引了。一个微小的OLED屏幕&#xff0c;在代码驱动下&#xff0c;竟然能呈现出如此逼真、灵动的眼球运动&#xff0c;那种介于生命与机械之间的诡…...

CFD工程师必看:TVD格式选型指南——从SUPERBEE到UMIST,哪个才是你的菜?

CFD工程师必看&#xff1a;TVD格式选型实战指南——从工程场景到最优解 在计算流体力学(CFD)的世界里&#xff0c;TVD格式就像赛车手的轮胎选择——没有绝对的好坏&#xff0c;只有场景的适配。当你在汽车外气动分析中遇到激波振荡&#xff0c;或在燃烧模拟中面临虚假扩散时&am…...

开源可视化利器:用声明式数据驱动构建交互式技术解释图

1. 项目概述&#xff1a;一个将复杂概念可视化的开源利器最近在整理技术分享材料时&#xff0c;我一直在寻找一种能直观展示复杂系统架构或算法流程的工具。传统的流程图工具要么太笨重&#xff0c;要么定制化程度不够&#xff0c;直到我遇到了nicobailon/visual-explainer这个…...

DeepLake:AI原生数据湖统一管理多模态数据与向量嵌入

1. 项目概述&#xff1a;当数据湖遇上AI向量化如果你正在构建一个AI应用&#xff0c;无论是RAG检索增强生成系统、多模态模型训练&#xff0c;还是复杂的语义搜索&#xff0c;数据管理环节的复杂性往往会让你头疼不已。传统的文件系统、数据库&#xff0c;甚至是对象存储&#…...

开源UI组件库深度解析:从设计系统到工程实践

1. 项目概述&#xff1a;一个开源UI组件库的诞生与价值如果你是一名前端开发者&#xff0c;或者正在负责一个需要快速搭建现代化界面的项目&#xff0c;那么你大概率听说过或者用过一些知名的UI组件库。今天我想深入聊聊一个在GitHub上拥有超过1.5万星标&#xff0c;被许多开发…...