掌握WPF控件:熟练常用属性(二)

WPF布局常用控件(二)

Calendar

  • 用于日期选择的控件。它提供了一个可视化的界面,可以通过它来选择特定的日期。
常用属性描述
DisplayMode用来设置Calendar的显示模式,有三种可选值:默认Month(月)、Year(年)和Decade(十年)。
SelectedDate用来获取或设置当前选中的日期。
Mode用来设置Calendar的显示模式,有默认Day(日)、Month(月)、Year(年)和Decade(十年)等模式。
FirstDayOfWeek用来设置一周的第一天是星期几。
DisplayDate用来设置初始显示得日期
SelectedDates用来获取当前选中的所有日期。
IsTodayHighlighted用来突出显示当前日期。默认IsTodayHighlighted 为 true。
SelectedDatesChanged选中的日期发生变化时会触发这个事件。
  • 下面写个列子
// xaml 代码
<Grid HorizontalAlignment="Center"><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="180"></RowDefinition><RowDefinition ></RowDefinition><RowDefinition></RowDefinition><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><Calendar Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" HorizontalAlignment="Center"  x:Name="myCalendar"   SelectedDatesChanged="myCalendar_SelectedDatesChanged"/><TextBlock Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3"  HorizontalAlignment="Center" x:Name="SelectedDateText" Text="" FontSize="20"></TextBlock><Button Grid.Column="0" Grid.Row="2" Height="40" Content="设置模式月(Month)默认" Click="Button_Change_Month"></Button><Button Grid.Column="1" Grid.Row="2" Height="40" Content="设置模式年(Year)" Margin="20 0" Click="Button_Change_Year"></Button><Button Grid.Column="2" Grid.Row="2" Height="40" Content="设置模式十年(Decade)" Click="Button_Change_Decade"></Button><Button Grid.Column="0" Grid.Row="3" Height="40"  Grid.ColumnSpan="3" Content="显示/隐藏今日日期突出" Click="Button_Change_IsTodayHighlighted" ></Button>
</Grid>
//C# 代码
using System.Windows;
using System.Windows.Controls;namespace WpfCommonControls
{/// <summary>/// Calendar.xaml 的交互逻辑/// </summary>public partial class Calendar : Window{public Calendar(){InitializeComponent();// 获取当前初始值var displayDate = myCalendar.DisplayDate;SelectedDateText.Text = $"选中日期(SelectedDate):{displayDate.ToString()}";}private void Button_Change_Month(object sender, RoutedEventArgs e){//设置显示模式月myCalendar.DisplayMode = CalendarMode.Month;}private void Button_Change_Year(object sender, RoutedEventArgs e){//设置显示模式年myCalendar.DisplayMode = CalendarMode.Year;}private void Button_Change_Decade(object sender, RoutedEventArgs e){//设置显示模式十年myCalendar.DisplayMode = CalendarMode.Decade;}private void myCalendar_SelectedDatesChanged(object sender, SelectionChangedEventArgs e){// 获取当前选中的日期集合  var selectedDate = myCalendar.SelectedDates;SelectedDateText.Text =$"选中日期(SelectedDate):{selectedDate.FirstOrDefault()}";或获取当前选中的日期  //var selectedDate = myCalendar.SelectedDate;//SelectedDateText.Text = $"选中日期(SelectedDate):{selectedDate.ToString()}";}private void Button_Change_IsTodayHighlighted(object sender, RoutedEventArgs e){//设置今日日期突出显示/隐藏myCalendar.IsTodayHighlighted = !myCalendar.IsTodayHighlighted;}}
}

Calendar

CheckBox

  • 是一个选框选框控件,它允许用户在界面上选择或取消选择一个选项。
常用属性描述
IsChecked用于获取或设置CheckBox的选中状态。它是个Nullable类型,选中时为true,未选中时为false,也可以设置为null表示不确定状态。
IsThreeState用于设置其具有三种状态:真、假和不确定。当IsThreeState属性设置为true时,CheckBox将多了一种“不确定状态”的第三种状态
Content用于获取或设置CheckBox的内容,它可以是任何类型的对象,例如字符串、数字、图像等
Checked当CheckBox的选中时,会触发Checked事件。
Unchecked当CheckBox的取消选中时,会触发Unchecked事件。
Indeterminate当CheckBox的状态不确定时,会触发Indeterminate事件
  • 下面写个列子
 <Grid HorizontalAlignment="Center"><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/><RowDefinition Height="Auto"/></Grid.RowDefinitions><TextBlock Text="复选框" Margin="0,20,10,20"FontFamily="Verdana" FontSize="18" FontWeight="Bold"Foreground="#FF5C9AC9" Grid.Row="0"/><CheckBox Grid.Row="1" Margin="0,10"  Content="默认设置勾选状态"  IsChecked="True"/><CheckBox Grid.Row="2" Margin="0,10"  Content="默认设置取消勾选状态"  IsChecked="False"/><CheckBox Grid.Row="3" Margin="0,10"  Content="默认设置不确定状态" IsThreeState="True"  IsChecked="{x:Null}"/><CheckBox x:Name="myCheckBox" Grid.Row="4" Margin="0,10" Content="三种状态" IsThreeState="True"Checked="myCheckBox_Checked" Unchecked="myCheckBox_Unchecked" Indeterminate="myCheckBox_Indeterminate" /><TextBlock x:Name="myTextTip" Grid.Row="5" Margin="0,10" /></Grid>
using System.Windows;namespace WpfCommonControls
{/// <summary>/// CheckBox.xaml 的交互逻辑/// </summary>public partial class CheckBox : Window{public CheckBox(){InitializeComponent();}private void myCheckBox_Checked(object sender, RoutedEventArgs e){// 勾选myTextTip.Text = $"三种勾选状态为:选中{myCheckBox.IsChecked}";}private void myCheckBox_Unchecked(object sender, RoutedEventArgs e){//取消勾选myTextTip.Text = $"三种勾选状态为:取消选中{myCheckBox.IsChecked}";}private void myCheckBox_Indeterminate(object sender, RoutedEventArgs e){//勾选状态为不确定时myTextTip.Text = $"三种勾选状态为:不确定{myCheckBox.IsChecked}";}}
}

CheckBox

ComboBox

  • 下拉列表框,它允许用户从下拉列表中选择一个选项。
常用属性描述
Items用于获取或设置ComboBox中的选项列表。
SelectedIndex用于获取或设置当前选中的选项的索引。
SelectedItem用于获取或设置当前选中的选项的值。
IsEditable用于设置ComboBox是否可编辑,如果可编辑,则用户可以在文本框中直接输入文本。
IsReadOnly用来设置用户是否能直接在ComboBox文本框内修改文本。IsReadOnly默认值为false,只有IsEditable设置为true时才生效。
  • 下面写个列子
//xaml代码
<Grid HorizontalAlignment="Center" ><Grid.RowDefinitions><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition><RowDefinition Height="Auto"></RowDefinition></Grid.RowDefinitions><!--绑定数据源,并且在c# 代码里SelectedIndex默认选中第一项,然后有用SelectedItem修改了选中第三项,最终的索引为2--><ComboBox x:Name="myComboBox" Grid.Row="0" Margin="10,10,0,0" VerticalAlignment="Top" Width="130" /><!--直接选项数据源,并且使用SelectedIndex 默认选中第一项--><ComboBox  x:Name="myComboBox1" Grid.Row="1" Margin="10,10,0,0" VerticalAlignment="Top"  Width="130" SelectedIndex="0"><ComboBox.Items><ComboBoxItem Content="我是xaml数据项1"/><ComboBoxItem Content="我是xaml数据项2"/><ComboBoxItem Content="我是xaml数据项3"/></ComboBox.Items></ComboBox><!--设置可编辑--><ComboBox  x:Name="myComboBox2" Grid.Row="2" Margin="10,10,0,0"  IsEditable="True" VerticalAlignment="Top" Width="280"><ComboBox.Items><ComboBoxItem Content="我是可编辑(IsEditable)并且能复制粘贴剪切1"/><ComboBoxItem Content="我是可编辑(IsEditable)并且能复制粘贴剪切2"/><ComboBoxItem Content="我是可编辑(IsEditable)并且能复制粘贴剪切3"/></ComboBox.Items></ComboBox><!--设置可编辑并且为只读--><ComboBox x:Name="myComboBox3"  Grid.Row="3" Margin="10,10,0,0"  IsEditable="True" IsReadOnly="True" VerticalAlignment="Top" Width="310"><ComboBox.Items><ComboBoxItem Content="我设置(IsEditable)可编辑并且(IsReadOnly)只能粘贴1"/><ComboBoxItem Content="我设置(IsEditable)可编辑并且(IsReadOnly)只能粘贴2"/><ComboBoxItem Content="我设置(IsEditable)可编辑并且(IsReadOnly)只能粘贴3"/></ComboBox.Items></ComboBox><Button Grid.Row="4" Height="30"  Margin="10,10,0,0" Content="设置所有选中第三项" Click="Button_Change_ComboBoxItem" ></Button>
</Grid>
//c#代码
using System.Windows;namespace WpfCommonControls
{/// <summary>/// ComboBox.xaml 的交互逻辑/// </summary>public partial class ComboBox : Window{public ComboBox(){InitializeComponent();// myComboBox添加数据LoadComboBoxItems();}private void LoadComboBoxItems(){myComboBox.Items.Add("我是c#添加数据1");myComboBox.Items.Add("我是c#添加数据2");myComboBox.Items.Add("我是c#添加数据3");myComboBox.SelectedIndex = 0; // 设置默认选中的选项//然后又用SelectedItem修改了选中值myComboBox.SelectedItem = "我是c#添加数据3";//最后的索引为2int lastIndex = myComboBox.SelectedIndex;}private void Button_Change_ComboBoxItem(object sender, RoutedEventArgs e){// 设置所有的选项为3myComboBox.SelectedIndex = 2;myComboBox1.SelectedIndex = 2;myComboBox2.SelectedIndex = 2;myComboBox3.SelectedIndex = 2;}}
}

ComboBox

ContextMenu

  • 用于实现上下文菜单的功能的控件。它通常在鼠标右键单击某个控件时显示一个菜单,供用户选择操作。ContextMenu可以包含MenuItem控件,每个MenuItem代表一个可选项,用户选择后执行相应的操作。
常用属性描述
Items用于添加菜单项的集合。
PlacementTarget用来指定ContextMenu相对于哪个元素定位。
Placement用来设置和获取ContextMenu在元素上的位置关系。可选有四种值:Auto、Top、Bottom、Right等
PlacementRectangle用来获取或设置上下文菜单打开时与其所在位置相对的区域。
HasDropShadow用来获取或设置一个值,该值指示上下文菜单是否显示投影。默认为true
IsOpen用来控制ContextMenu是否显示。
HorizontalOffset用来获取或设置目标原点与弹出项对齐点之间的水平距离。
VerticalOffset用来获取或设置目标原点与弹出项对齐点之间的垂直距离。
  • 下面写个列子
<Grid HorizontalAlignment="Center" ><Grid.RowDefinitions><RowDefinition></RowDefinition><RowDefinition></RowDefinition><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><!--按钮绑定菜单--><Button Grid.Row="0" x:Name="cmButton" Height="30" Width="180">带菜单的按钮,右键打开菜单<Button.ContextMenu><ContextMenu x:Name="myContextMenu"><MenuItem Header="添加"/><MenuItem Header="修改"/><MenuItem Header="报错"/><MenuItem Header="带有二级选项"><MenuItem Header="二级修改"/><MenuItem Header="二级保存"/></MenuItem></ContextMenu></Button.ContextMenu></Button><!--文本绑定菜单--><TextBox Grid.Row="1" Name="textBox1"TextWrapping="Wrap"Margin="0, 20,0,10">我是可以根据菜单事件动态更改文本样式<TextBox.ContextMenu><ContextMenu><!--开启选中,可以勾选--><MenuItem Header="设置粗体" IsCheckable="True" Checked="Bold_Checked" Unchecked="Bold_Unchecked" /><MenuItem Header="设置斜体"  IsCheckable="True"  Checked="Italic_Checked"  Unchecked="Italic_Unchecked" /><!--分割线--><Separator /><MenuItem Header="动态设置字体增大"   Click="IncreaseFont_Click" /><MenuItem Header="动态设置字体缩小"  Click="DecreaseFont_Click" /></ContextMenu></TextBox.ContextMenu></TextBox><!--按钮绑定菜单--><Button x:Name="myPlacementTargetBtn"  Margin="0, 10" Grid.Row="2" Height="30" Width="180" Click="Button_Click"  ContextMenuOpening="ContextMenu_ContextMenuOpening">点击设置菜单显示位置<Button.ContextMenu><ContextMenu><MenuItem Header="添加"/><MenuItem Header="修改"/></ContextMenu></Button.ContextMenu></Button><!--按钮绑定菜单--><Button  Grid.Row="3" Height="30" Width="250">设置菜单水平和垂直相对位置,并且无投影<Button.ContextMenu><ContextMenu   HorizontalOffset="50" VerticalOffset="50" HasDropShadow="False"><MenuItem Header="添加"/><MenuItem Header="修改"/></ContextMenu></Button.ContextMenu></Button>
</Grid>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;namespace WpfCommonControls
{/// <summary>/// ContextMenu.xaml 的交互逻辑/// </summary>public partial class ContextMenu : Window{public ContextMenu(){InitializeComponent();}private void Bold_Checked(object sender, RoutedEventArgs e){// 勾选设置为粗体textBox1.FontWeight = FontWeights.Bold;}private void Bold_Unchecked(object sender, RoutedEventArgs e){// 取消设置正常textBox1.FontWeight = FontWeights.Normal;}private void Italic_Checked(object sender, RoutedEventArgs e){//设置字体倾斜textBox1.FontStyle = FontStyles.Italic;}private void Italic_Unchecked(object sender, RoutedEventArgs e){// 取消 设置字体正常textBox1.FontStyle = FontStyles.Normal;}private void IncreaseFont_Click(object sender, RoutedEventArgs e){// 动态设置字体加1if (textBox1.FontSize < 18){textBox1.FontSize += 2;}}private void DecreaseFont_Click(object sender, RoutedEventArgs e){// 动态设置字体减1if (textBox1.FontSize > 10){textBox1.FontSize -= 2;}}private void Button_Click(object sender, RoutedEventArgs e){//点击按钮手动打开myContextMenu.PlacementTarget = myPlacementTargetBtn; // 设置PlacementTarget属性为myPlacementTargetBtn控件  myContextMenu.Placement = PlacementMode.Bottom; // 设置显示位置为下方  myContextMenu.PlacementRectangle = new Rect(100, 100, 0, 0);//设置相对位置 x=100,y=100,宽度和高度为0myContextMenu.IsOpen = true;  //打开}private void ContextMenu_ContextMenuOpening(object sender, ContextMenuEventArgs e){// 用来禁用右键打开菜单e.Handled = true; }}
}

ContextMenu

公众号“点滴分享技术猿

关注

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

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

相关文章

自编C++题目——输入程序

预估难度 简单 题目描述 小明编了一个输入程序&#xff0c;当用户的输入之中有<时&#xff0c;光标移动到最右边&#xff1b;当输入有>时&#xff0c;光标移动到最左边&#xff0c;当输入有^时&#xff0c;光标移动到前一个字符&#xff0c;当输入为#时&#xff0c;清…

SLAM第十四讲

基础知识 四元数 先将三维空间的点p(x,y,z) 变成四元数的表示q(0,x,y,z) 其中0为四元数的实部&#xff0c;x,y,z为四元数的虚部。 实部为0的四元数也叫纯虚四元数。 通过 左乘四元数&#xff…

YOLOv8 Ultralytics:使用Ultralytics框架进行SAM图像分割

YOLOv8 Ultralytics&#xff1a;使用Ultralytics框架进行SAM图像分割 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行SAM图像分割参考文献 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xf…

TypeScript进阶(四)声明文件

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…

长亭科技-雷池WAF的安装与使用

目录 1、安装雷池 2、登录雷池 3、简单配置 4、防护测试 5、其他补充 1、安装雷池 在Linux系统上执行如下命令 &#xff08;需要docker环境&#xff0c;提前把docker、docker-compose 装好&#xff09; bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release…

【电源专题】案例:不同模块同一个管脚默认状态不一样会导致什么异常?

案例背景:在产品设计中,有时候会兼容两个不同供应商同一个方案的模块。比如两个供应商使用的内部方案都是一样的芯片,封装也是兼容的。但是由于专利、LAYOUT方便、软件开发方便等角度来看,可能会存在不同模块供应商的同一个PIN脚对应的芯片内部的管脚不一样。管脚不一样那么…

java基础知识点系列——分支语句(六)

java基础知识点系列——分支语句&#xff08;六&#xff09; 流程控制 流程控制语句分类 顺序结构分支结构循环结构 顺序结构 顺序结构是程序中最简单最基本的流程控制&#xff0c;没有特定的语法结构&#xff0c;按照代码的先后顺序&#xff0c;依次执行。 if语句 if语…

39岁学JAVA来得及吗?

39岁学JAVA来得及吗? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;学习Java编…

五种嵌入式经典通信总线协议

一.先前知识 1.并行与串行 并行通信和串行通信是两种不同的数据传输方式&#xff1a; 并行通信&#xff1a;并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输&#xff0c;同时进行。这样可以在一个时钟周期内传输多个比特&…

螺纹钢负公差轧制中的测径仪应用

1、负公差轧制意义 为了满足生产使用要求&#xff0c;并根据轧制水平&#xff0c;在产品标准冲规定钢材尺寸的波动范围&#xff0c;允许钢材的实际尺寸与公称尺之间有一定的偏差&#xff0c;这个偏差一般称公差&#xff0c;公差分正、负公差&#xff0c;钢材按负公差轧制时&…

02.neuvector之Enforcer容器功能介绍

原文链接 一、功能介绍 Enforcer容器在neuvector中主要负责网络与DLP/WAF的规则策略的实现以及网络数据的采集上报&#xff1b; 以DaemonSet的方式运行&#xff0c;主要有三个进程monitor、agent、dp&#xff1b;进程分别主要职责如下&#xff1a; monitor&#xff1a;负责监…

[SpringAop + Logback +MDC] 现网必备全链路日志追踪

缘起&#xff1a;前几天有个粉丝私信&#xff0c;想了解现网环境如果出现问题&#xff0c;怎么快速定位。可能有些小伙伴这时候就会脱口而出&#xff0c;直接去看log 呗&#xff0c;有什么好说的。 但是&#xff0c;众所周知&#xff0c;后端服务面向的前端应用是多种多样的&am…

Shiro框架:Shiro登录认证流程源码解析

目录 1.用户登录认证流程 1.1 生成认证Token 1.2 用户登录认证 1.2.1 SecurityManager login流程解析 1.2.1.1 authenticate方法进行登录认证 1.2.1.1.1 单Realm认证 1.2.1.2 认证通过后创建登录用户对象 1.2.1.2.1 复制SubjectContext 1.2.1.2.2 对subjectContext设…

二、MySQL安装

目录 1、双击mysql8的安装向导 2、分为首次安装和再安装 1&#xff09;、首次安装 &#xff08;1&#xff09;如果是首次安装mysql系列的产品&#xff0c;需要先安装mysql产品的安装向导 &#xff08;2&#xff09;选择安装模式 2&#xff09;、不是首次安装 &#xff0…

学会这个技巧,制作电子杂志SOEASY

​电子杂志是一种非常流行的传播方式&#xff0c;它能够以更加生动、直观的方式展示你的品牌和产品。通过电子杂志&#xff0c;你可以将文字、图片、视频等多种元素有机地结合起来&#xff0c;创造出令人难忘的视觉效果。 如果你想制作一本电子杂志&#xff0c;但不知道从何入…

POSIX API与网络协议栈

本文介绍linux中与tcp网络通信相关的POSIX API&#xff0c;在每次调用的时候&#xff0c;网络协议栈会进行的操作与记录。 POSIX API Posix API&#xff0c;提供了统一的接口&#xff0c;使程序能得以在不同的系统上运行。简单来说不同的操作系统进行同一个活动&#xff0c;比…

QT上位机开发(进度条操作)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 进度条是一个比较常见的控件。如果某个操作需要很长的时间才能完成&#xff0c;那么这个时候最好有一个进度条提示&#xff0c;这样比较容易平复一…

18 串口通讯

文章目录 18.0 前言18.1 串口通讯协议简介18.1.1 物理层 18.2 RT1052 的 LPUART 简介18.3 UART 功能框图18.3.1 中断控制 18.4 UART 初始化结构体详解18.4.1 baudRate_Bps18.4.2 parityMode18.4.3 dataBitsCount18.4.4 isMsb18.4.5 stopBitCount18.4.6 txFifoWatermark与rxFifo…

JAVA开发入门

文章目录 计算机基本概念DOS常用命令JAVA语言发展史JDK下载JAVA体系与特点JDK安装JAVA环境变量配置 计算机基本概念 计算机组成原理 计算机组装 计算机&#xff1a;电子计算机&#xff0c;俗称电脑。是一种能够按照程序运行&#xff0c;自动、高速处理海量数据的现代化智能电子…

MATLAB中simulink中scope同时显示两个输入信号

在使用scope时&#xff0c;需要两个输入信号的设置方法 1.点开scope图标 2 点击设置按钮&#xff0c; 然后弹出configuration properties&#xff1a;scope配置图&#xff0c;在Main选项下&#xff0c;在Number of input ports&#xff1a;1这里面更改数字&#xff0c;需要几…