WPF篇(20)- Menu菜单+ContextMenu上下文菜单+StatusBar状态栏

Menu菜单

Menu控件继承于MenuBase,而MenuBase继承于ItemsControl。所以学习Menu之前,要先了解一下MenuBase基类。它是一个抽象类,拥有一个ItemContainerTemplateSelector模板选择器,并重写了一些关于键盘和鼠标的方法。

Menu的子项必须为MenuItem。这个MenuItem和前面的TreeViewItem类似,拥有共同的HeaderedItemsControl父类,也就是说,MenuItem本身也是一个集合控件,若要以代码形式加载Menu的内容,也必须要掌握递归的加载思路。

1. 示例1

MenuItem从鼠标的交互上,提供了两种方式。第一种是提供了Click事件,开发者可以订阅该事件以编写相应的业务逻辑。第二种是提供了ICommand接口属性和CommandParameter命令参数,以WPF命令的形式开发业务逻辑。

前端代码

<Grid><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/></Grid.RowDefinitions>        <Menu x:Name="_Menu"><MenuItem Header="文件"><MenuItem Header="新建" Click="MenuItem_Click"/><MenuItem Header="打开" Click="MenuItem_Click"><MenuItem.Icon><Image Source="/Images/logo.png"/></MenuItem.Icon></MenuItem></MenuItem>                      <MenuItem Header="编辑"/><MenuItem Header="视图"/><MenuItem Header="项目"/><MenuItem Header="调试"/><MenuItem Header="测试"/><MenuItem Header="分析"/><MenuItem Header="工具"/><MenuItem Header="帮助"/></Menu><TextBlock x:Name="_TextBlock" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock></Grid>

后端代码


using System.Windows;
using MenuItem = System.Windows.Controls.MenuItem;namespace WpfTest01
{public partial class MainWindow{        public MainWindow(){InitializeComponent();}private void MenuItem_Click(object sender, RoutedEventArgs e){var item = sender as MenuItem;_TextBlock.Text = $"你单击了 {item.Header}";}}
}

在这里插入图片描述

2. Menu数据绑定

我们需要创建一个实体类,来代表Menu的每一个子项。

后端代码

using System.Collections.Generic;namespace WpfTest01
{/// <summary>/// 主菜单的实体/// </summary>public class MenuModel{public string Name { get; set; }public List<MenuModel> Children { get; set; } = new List<MenuModel>();public string View { get; set; }}
}

前端代码

<Window x:Class="WpfTest01.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:WpfTest01"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Grid><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/></Grid.RowDefinitions>        <Menu x:Name="_Menu"><Menu.ItemTemplate><HierarchicalDataTemplate ItemsSource="{Binding Children}"><TextBlock Text="{Binding Name}"/></HierarchicalDataTemplate></Menu.ItemTemplate></Menu></Grid>
</Window>

后端代码


using System.Collections.Generic;
namespace WpfTest01
{public partial class MainWindow{        public List<MenuModel> Menus { get; set; } = new List<MenuModel>();public MainWindow(){InitializeComponent();for (int i = 0; i < 5; i++){MenuModel parent = new MenuModel();parent.Name = $"一级菜单 ";for (int j = 0; j < 5; j++){MenuModel child = new MenuModel();child.Name = $"二级菜单 ";parent.Children.Add(child);}Menus.Add(parent);}_Menu.ItemsSource = Menus;}}
}

在这里插入图片描述

ContextMenu上下文菜单

ContextMenu上下文菜单必须要依附于一个“宿主控件”。由于FrameworkElement基类有一个叫ContextMenu的属性,代表了鼠标右键时弹出一个菜单,所以大多数控件都可以设置“上下文菜单”。

ContextMenu继承于MenuBase,而MenuBase继承于ItemsControl。所以,ContextMenu本质上也是一个集合控件。而它的元素则是MenuItem。在用法上,与Menu控件差不多。

1. 属性成员

  • HorizontalOffset:获取或设置目标原点和弹出项对齐之间的水平距离点。
  • StaysOpen:是否保持打开状态。
  • CustomPopupPlacementCallback:获取或设置ContextMenu指示在屏幕位置的回调。
  • HasDropShadow:是否有投影出现的上下文菜单。
  • Placement:获取或设置ContextMenu显示的相对位置。
  • PlacementRectangle:获取或设置相对于其上下文菜单位于在打开时的区域。
  • PlacementTarget:获取或设置ContextMenu打开时的相对控件。
  • IsOpen:是否打开。
  • VerticalOffset:获取或设置目标原点和弹出项对齐之间的垂直距离点。

2. ContextMenu示例

<Window x:Class="WpfTest01.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:WpfTest01"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Grid><Border Background="LightBlue" Width="200" Height="100" CornerRadius="15"><Border.ContextMenu><ContextMenu><MenuItem Header="复制"/><MenuItem Header="粘贴"/><MenuItem Header="删除"/><MenuItem Header="关于"/></ContextMenu></Border.ContextMenu></Border>        </Grid>
</Window>

在这里插入图片描述

StatusBar状态栏

StatusBar是一个“包容性”极强的控件,通常的作用是作为程序的状态内容显示。它同样继承于ItemsControl基类,所以,它也是一个集合控件。

它的元素是StatusBarItem类型,而StatusBarItem继承于ContentControl内容控件,所以,本质上讲,StatusBar的元素可以是任意类型的控件。因为StatusBarItem元素有一个叫Content的属性。

这个控件其实并不常用,通常情况下被当成一个布局控件来使用。如下所示:

<Window x:Class="WpfTest01.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:WpfTest01"mc:Ignorable="d"Title="MainWindow" Height="350" Width="525"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition Height="auto"/></Grid.RowDefinitions><StatusBar Grid.Row="1"><StatusBarItem Content="www.baidu.com"/><StatusBarItem><CheckBox Content="CheckBox"/></StatusBarItem><StatusBarItem><RadioButton Content="RadioButton"/></StatusBarItem><StatusBarItem><Button Content="Button"/></StatusBarItem><TextBlock Text="文字块"/></StatusBar></Grid>
</Window>

在这里插入图片描述

到此WPF的常用的集合控件就给大家分享完了,我认为还是非常全面的,每一个控件的详细使用都给大家做了演示和代码分享,希望能够帮助到大家,接下来会继续给大家分享WPF的数据绑定,这个是WPF的灵魂,没有数据的绑定,页面也就没有了意义,就是一个空壳子,希望大家持续关注。

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

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

相关文章

电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!

你是否曾好奇那些键盘敲击背后的秘密&#xff1f;电脑监控不仅是守护企业安全的隐形盾牌&#xff0c;更是揭秘高效与合规的魔法镜&#xff01;一键解锁安企神监控回放&#xff0c;就像打开时间宝盒&#xff0c;让过去的工作瞬间跃然眼前。无论是精彩瞬间还是潜在风险&#xff0…

【Android】adb devices 出现devices offline的问题

1 问题 adb devices 出现devices offline 2 解决方法 adb kill-serveradb start-server 然后&#xff0c;adb devices查看。 adb devices 问题解决啦。。。&#x1f49b; &#x1f499; &#x1f49c; ❤️ &#x1f49a; &#x1f49b; &#x1f499; &#x1f49c; ❤️…

12/24/30v/36转固定5v输出芯片

设计电源芯片的应用方案时&#xff0c;必须保证输入电压在DC6V至30V范围内&#xff0c;输出电压为固定的5V&#xff0c;同时电流需在200至300mA之间。在这种需求下&#xff0c;推荐使用AH1405芯片&#xff0c;因其输入电压范围宽&#xff08;6-40V&#xff09;&#xff0c;内置…

自闭症寄宿语言开发全托学校

在自闭症儿童的世界里&#xff0c;语言往往是一座难以跨越的高山。语言问题作为自闭症儿童的核心障碍之一&#xff0c;给他们的生活、学习和社交带来了极大的困扰。因此&#xff0c;语言开发对于自闭症儿童来说至关重要。那么&#xff0c;怎样才能更好地对自闭症儿童进行语言开…

arthas源码刨析:启动 (1)

文章目录 arthas-bootBootstrap Created with Raphal 2.3.0 开始 检查监听端口 jps 列表java应用 下载 lib 依赖 功能移交给 arthas-core 结束 arthas-boot 该module 的代码只有3个类&#xff1a; Bootstrap 启动类 Bootstrap &#xff0c;开头的注解就是 alibaba 的 cli 中…

Qt 0820作业

一、思维导图 二、闹钟 头文件代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> //时间类 #include <QTimer> //时间事件类 #include <QTimerEvent> //定时器事件类 #include <QMouseEvent> //鼠标…

CSS 元素的尺寸

const dom document.querySelector(‘.size’) 以下方法只是拿的width举例 浏览器渲染管线 dom.style.width: 它读取/设置的是浏览器渲染管线的第一个步骤dom解析,也就是DOM树 比如: <a style"width:100px"></a><a style"width: auto"&…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(三)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

Android常见界面控件(二)

目录 ​前言 一、 RadioButton控件 设置RadioGroup的监听事件 二、CheckBox控件 三、Toast类 改变Toast窗口的提示位置 四、EditText控件 常用属性 前言 在上一篇中&#xff0c;我们讲解了三个常见的控件&#xff1a;TextView控件、Button控件、ImageView控件&#xf…

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机

现代化生产中&#xff0c;电子元件通常会使用自动化设备来进行生产&#xff0c;例如像PCB&#xff08;印刷电路板&#xff09;的组装。但是生产过程中也会面临一些问题&#xff0c;类似于如何解决在PCB板上牢固、精准地安装各种组件呢&#xff1f;IBL Lttechnik GmbH公司的CM80…

5.Linux_Shell编程

概述 什么是shell脚本&#xff1a; Shell脚本是利用shell的功能所写的一个程序。这个程序是使用纯文本文件&#xff08;后缀为.sh&#xff09;&#xff0c;将一些shell的语法与命令&#xff08;含外部命令&#xff09;写在里面&#xff0c;搭配正则表达式、管道命令与数据流重…

公认最强充电宝有哪些?盘点四款公认强悍级别充电宝推荐

随着智能手机和其他移动设备的广泛应用&#xff0c;充电宝已经成为我们生活中不可或缺的一部分。然而&#xff0c;市场上众多品牌和型号的充电宝也让消费者面临选择难题&#xff0c;安全隐患也随之浮现。因此&#xff0c;选择一款安全可靠、性能卓越的充电宝显得尤为重要。本文…

“跨越国界,共赢未来:跨境联盟营销的策略与实践

全球化背景下跨境联盟营销的市场有很多机遇&#xff0c;随着全球化的深入发展&#xff0c;跨境电商市场不断扩大&#xff0c;为企业提供了广阔的市场空间。跨境联盟营销可以借助全球化的趋势&#xff0c;实现品牌国际化和市场拓展。随着大数据、人工智能、区块链等技术的不断发…

【数据结构】PTA 求链表的倒数第m个元素 C语言

请设计时间和空间上都尽可能高效的算法&#xff0c;在不改变链表的前提下&#xff0c;求链式存储的线性表的倒数第m&#xff08;>0&#xff09;个元素。 函数接口定义&#xff1a; ElementType Find( List L, int m ); 其中List结构定义如下&#xff1a; typedef struct…

5个自动化面试题,助你过关斩将!

一、python深拷贝与浅拷贝的区别 Python中的深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是两种不同的对象复制方式&#xff0c;它们之间的主要区别在于复制的内容和范围。 浅拷贝&#xff08;Shallow Copy&#xff09; 浅拷贝会创…

memcpy函数,自动获取LCD硬件参数

示例&#xff1a;将开发板颜色变为红色 #include<stdio.h> #include<unistd.h> #include<sys/mman.h> #include<string.h> #include<fcntl.h> #include<linux/fb.h>int main() {// 以读写权限打开液晶屏文件int lcd open("/dev/fb0…

如何在SOLIDWORKS中自定义材料库

使用SolidWorks对模型进行评估时都需要现定义一个材料&#xff1b;例如&#xff1a;测量模型的质量属性、使用限元分析模型等&#xff0c;SolidWorks自带了丰富的材质库&#xff0c;满足了绝大部分的设计需求。但是难免会遇到一些特点的材质属性&#xff0c;在SOLIDWORKS中无法…

行业标杆 | 澳鹏Appen入选“2024年中国AI基础数据服务研究报告”

AI基础数据服务可加速高质量数据的获取与标注&#xff0c;推动AI算法的创新与持续优化&#xff0c;是AI产业发展的重要支撑。艾瑞咨询近日发布《2024年中国AI基础数据服务研究报告》&#xff0c;深度剖析了当前AI数据行业的挑战和机遇&#xff0c;并前瞻预测了未来趋势。作为AI…

将自己的网站改造成可安装的PWA

概述 本文是一篇水文&#xff0c;感兴趣的读者可以看看。分享一下怎么讲自己的网站改造成可安装的PWA。 PWA简介 渐进式 Web 应用&#xff08;Progressive Web App&#xff0c;PWA&#xff09;是一个使用 web 平台技术构建的应用程序&#xff0c;但它提供的用户体验就像一个…

【大模型理论篇】强化学习RL与大模型智能体

1. 背景介绍 大模型商业化&#xff0c;解决某类实际的业务问题&#xff0c;仅靠大模型本身其实存在很大的局限性&#xff0c;很多场景下不足以完全胜任真实业务需求【1】。 例如&#xff0c;如果给大模型发出指令&#xff1a;“过去5年间&#xff0c;隐私计算和数据要素…