C#入门级-使用VS2022编写C#(包括WPF,对象属性赋值、x名称空间介绍)——商场收银系统

使用winform编写商场收银系统

C#键控集合(键值)和IDictionary与策略模式结合——商场收银系统_dlwlrma_516的博客-CSDN博客https://blog.csdn.net/dlwlrma_516/article/details/127143041?spm=1001.2014.3001.5501WPF的基础知识看这里

C#入门级-使用VS2022编写C#(包括WPF,XAML基础、创建新项目)_dlwlrma_516的博客-CSDN博客https://blog.csdn.net/dlwlrma_516/article/details/127159830?spm=1001.2014.3001.5501

主要是以学习为主,以前用Winform写过简单商场收银系统,现在转换到使用WPF来实现

目录

第一部分、WPF基础知识

对象属性赋值

①使用字符串进行简单赋值

②使用属性元素(Property Element)进行复杂赋值

标记扩展

x名称空间介绍

x:Name的含义

x:FieldModifier

x:Key

第二部分、商场收银系统

第一步、创建新项目

第二步、新建组件、创建类库——模块化

使用Canvas控件

第三步、主界面引用


第一部分、WPF基础知识

对象属性赋值

XAML是一种声明性语言,XAML编译器会为每个标签创建一个与之对应的对象。创建对象后,需对其属性初始化。因为XAML语言不能编写程序的运行逻辑,所以一份XAML文档中除了使用标签声明对象就是初始化对象的属性。

XAML中为对象属性赋值共两种语法(例子为Rectangle类对象的Fill属性):

①使用字符串进行简单赋值

Attribute1=Value1

<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
    <Rectangle x:Name="rectangle" Width="200" Height="120" Fill="Blue"/>
</Grid>

更复杂的字符串实例

<Path Data="M 0,0 L 0,65 L 65,0 Z" Stroke="Transparent" Fill="HotPink"/>

由于使用Attribute1=Value1存在缺点:Value只能是一个字符串。如果一个类只能使用XAML语言进行声明,并允许其Property(面向对象理论范畴,对客观实物进行抽象出来的属性)与XAML标签的Attribute(编程语言文法层面,用于区分两个同类语法元素A和B的特征)互相映射,那就需要为这些Property进行转换。

定义TypeConverter类的派生类,重写TypeConverter的方法

使用TypeConverter类将XAML标签的Attribute与对象的Property进行映射

.cs文件中的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ShopWpf
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //先把Window资源检索出来,窗体自己的方法FindResource,把字典给方法,返回类型为object,要转换为Staff
            Staff staff = this.FindResource("staff") as Staff; 
            if (staff != null)
            {
                MessageBox.Show("当前员工姓名:"+ staff.Name + "\n" +
                                "员工号码:" + staff.Telephone + "\n" +
                                "员工家庭成员:" + staff.Familymember.Name); //staff的Name属性本身就是字符串类型
            }
        }
    }
    //NameToStaffTypeConverter类以特性形式附加到Staff类上去
    [TypeConverterAttribute(typeof(NameToStaffTypeConverter))]
    public class Staff
    { 
        public string Name { get; set; }
        public string Telephone { get; set; }
        public Staff Familymember { get; set; } //职员的家庭成员也有名字和电话号码
    }

    public class NameToStaffTypeConverter : TypeConverter //定义TypeConverter的派生类
    {   //给出staff中的Familymember一个字符串就可以基于这个字符串就可以声明一个Staff的对象并且把这个字符串赋值给Name属性
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) //重写方法
        {
            string name = value.ToString();
            Staff familymember = new Staff();
            familymember.Name = name;
            return familymember;
        }
    }

对应的.xaml文件

<Window x:Class="ShopWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:cl="clr-namespace:ControlLibrary;assembly=ControlLibrary"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:ShopWpf"
    Title="商场收银系统" Height="600" Width="450" WindowStartupLocation="CenterScreen">
    <!--local:因为ShopWpf命名空间包含在当前程序集中,一般将当前程序集包含的命名空间映射为local的名称空间-->
    <!--启动在屏幕正中央-->
    <Window.Resources>
        <!--通过window的资源声明出来,添加资源,资源字典,通过索引检索,属性标签形式,添加字符串,用于标签扩展-->
        <!--Staff对象作为Window资源声明出来-->
        <local:Staff x:Key="staff" Name="Alice" Telephone="10000000" Familymember="Tom"/>
        <!--Staff对象检索存在于命名空间中Key对象-->
        <!--通过标签形式声明一个Staff对象-->
    </Window.Resources>
    <Grid>
        <Button Content="登录" HorizontalAlignment="Left" VerticalAlignment="Top" Height="46" Background="Transparent" BorderBrush="Transparent" RenderTransformOrigin="0.5,0.5" Margin="-28,-7,0,0" Width="88" Click="Button_Click">
            <Button.RenderTransform>
                <TransformGroup>
                    <ScaleTransform/>
                    <SkewTransform/>
                    <RotateTransform Angle="-45"/>
                    <TranslateTransform/>
                </TransformGroup>
            </Button.RenderTransform>
        </Button>
    </Grid>
</Window>

②使用属性元素(Property Element)进行复杂赋值

 在XAML中,非空标签均具有内容(Content),标签内容指在开始标签和结束标签之间的一些子级标签,每个子级都是父级标签内容的一个元素(Element),简称为父级标签的一个元素,属性标签指的是某个标签的一个元素对应这个标签的一个属性,即以元素的形式来表达一个实例的属性。

<ClassName>
    <ClassName.PropertyName>
        <!--以对象形式为属性赋值-->
    </ClassName.PropertyName>
</ClassName>

以上一个例子改写

<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
    <Rectangle x:Name="rectangle" Width="200" Height="120">
        <Rectangle.Fill>
            <SoildColorBrush="Blue"/>
    </Rectangle>
</Grid>

通过使用属性元素来进行赋值,可以设计一个渐变色的Canvas


                
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用 WPF 创建包含六个功能的界面的示例: ```xaml <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My App" Height="350" Width="525"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- 标题 --> <TextBlock Text="My App" FontSize="24" Margin="10"/> <!-- 功能区域 --> <StackPanel Grid.Row="1" Margin="10"> <!-- 功能1 --> <Button Content="功能1" Click="Function1_Click" Margin="0 0 0 10"/> <!-- 功能2 --> <Button Content="功能2" Click="Function2_Click" Margin="0 0 0 10"/> <!-- 功能3 --> <Button Content="功能3" Click="Function3_Click" Margin="0 0 0 10"/> <!-- 功能4 --> <Button Content="功能4" Click="Function4_Click" Margin="0 0 0 10"/> <!-- 功能5 --> <Button Content="功能5" Click="Function5_Click" Margin="0 0 0 10"/> <!-- 功能6 --> <Button Content="功能6" Click="Function6_Click" Margin="0 0 0 10"/> </StackPanel> </Grid> </Window> ``` 在上述代码中,我们使用了一个 Grid 布局,分为两行。第一行是标题,使用 TextBlock 控件实现;第二行是功能区域,使用 StackPanel 控件实现。在 StackPanel 中,我们使用了六个 Button 控件,分别代表六个功能。每个 Button 控件都绑定了一个 Click 事件,当用户点击时会触发相应的事件处理程序。例如,当用户点击按钮 "功能1" 时,会触发事件处理程序 Function1_Click。 需要注意的是,上述代码中的事件处理程序都没有实现具体的功能,您需要根据自己的实际需求来编写相应的代码。例如,可以在 Function1_Click 方法中实现功能1,以此类推。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值