初学WPF

1.对WPF的了解

官方解释:

WPF全称是Windows Presentation Foundation,它的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括Extensible Application Markup Language (XAML)、控件、数据绑定、布局、2-D和3-D图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在 Microsoft .NET Framework 中,使您能够生成融入了 .NET Framework 类库的其他元素的应用程序。

通俗解释:

WPF是一个UI框架,此框架利用了设备的图形处理优势,让其可以更加灵活的实现UI,而在UI中我们可以通过XAML、控件,然后利用图形、动画、样式等实现丰富的UI界面,同时还可以通过数据绑定,让UI和后端更好的衔接,实现数据动态交互。WPF和Winform(WF)相比,WPF更加的灵活,如果做过WEB开发的,会发现它和WEB有很多相似之处,至少思想有点相通,较WF而言,更侧重UI,并且分离比WF更好。

分离的优点:

  1. 降低开发和维护成本。
  2. 开发效率更高,因为设计人员和开发人员可以同步进行。
  3. 可以使用多种设计工具实现和共享XAML标记。
  4. WPF应用程序的全球化和本地化得以大大简化。

2. WPF的学习路线

跳脱WF开发思维:在学WPF之前,需要有C#的基础,其次要从WF拖控件的思维中跳脱出来,否则会形成固化思维,无法适应WPF开发。

WPF基础掌握:WPF的基础侧重点在于XAML、控件、布局等的学习,这个可以参考官方的文档进行学习

WPF深入学习:这儿主要是侧重数据、事件等的驱动学习。

WPF扩展学习:对图形、多媒体的处理,以及第三方的一些框架的使用学习。当然还有其他。

3. WPF的应用场景

  1. 独立的应用程序,比如传统风格的Windows应用程序。
  2. XAML Browser applications(XBAPs),由导航页面构成的应用程序,可以通过IE或者火狐等WEB浏览器运行。
  3. 自定义控件库(包含可重用控件的不可执行程序集)。
  4. 类库(包含可重用类的不可执行程序集)。

4. 开发工具

开发工具版本:VS2022社区版 "程序员晓晓" 回复"vs2022" 安装教程放到授课资料中.net5 .net6》》》webWPF没法跨平台》》》需要借助于框架完成

Winform :界面层+设计代码层+隐藏代码
WPF:界面层(.xaml,xaml是一种声明式标记语言)+隐藏代码

共同点:都可以开发窗体程序(.exe)、都属于UI框架、都有控件。。。
不同点:WPF不受分辨率限制、可以开发让浏览器显示的程序。。。

Window:是一个根标签,用来定义一个窗口
:网格布局元素。

        <Grid> 
            
        </Grid>

5. XAML认识

HTML、XML
XAML:Extensible Application Markup Language,可扩展应用程序标记语言,声明式标记语言。
扩展名为: .xaml的xml文件 UTF-8编码
专门用于WPF中的UI设计语言。
HTML、MXML、XSLT等。

在XAML中,通常把标签元素称为对象元素。
语法:
【1】内容对象元素:<对象元素>...</对象元素>
示例:

 <Grid>
        <Button Name="button" Click="button_Click">我的第一个WPF应用程序</Button>
 </Grid>

【2】自封闭对象元素:<对象元素 />
示例:
<Button />

StackPanel:布局元素,堆叠布局元素。

以下是嵌套内容:

<StackPanel>
            <Button Name="button" Click="button_Click">我的第一个WPF应用程序</Button>
            <Button Content="点击我" />
</StackPanel>

6. XAML常见的一些设置

第一:特性语法
【1】属性语法
对象的属性在对象元素中,通常称为对象元素的特性(属性)。
语法:特性名="值"
提示:此处的值需要包含在引号中,以字符串的形式进行指定

  • Background:背景颜色属性。
  • Foreground:设置字体颜色

F1: 可以进入到指定属性的官方文档说明

【2】事件语法
特性的值是实现事件委托的处理程序名称。

第二:属性元素语法
属性元素:通常用于当前对象元素的某个属性,无法通过特性语法实现我们想要对对象元素传递的信息。
语法:<元素类型名称.属性名称></元素类型名称.属性名称>

 <Button>
                <Button.Content>
                    我是通过属性元素进行设置
                </Button.Content>
                <Button.Background>
                    <SolidColorBrush Color="Green" />
                </Button.Background>
                <Button.Foreground>
                    <SolidColorBrush Color="White" />
                </Button.Foreground>
</Button>

第三:集合语法
集合语法:通常某一些特性属性,需要通过集合类型的方式去完成相应的效果,比如添加渐变色,此时就需要用到集合语法。

示例:

 <Rectangle Height="100">
                <Rectangle.Fill>
                    <LinearGradientBrush StartPoint="1,0" EndPoint="1,1">
                        <LinearGradientBrush.GradientStops>
                            <GradientStop Offset="0.0" Color="Red" />
                            <GradientStop Offset="0.5" Color="Green" />
                            <GradientStop Offset="1.0" Color="Blue" />
                        </LinearGradientBrush.GradientStops>
                    </LinearGradientBrush>
                </Rectangle.Fill>
            </Rectangle>

第四:XAML内容属性
内容属性:XAML中通过对象元素的子元素设置内容属性的值,而且一个类可以指定一个且仅一个属性为XAML内容。

简写形式:

        <Border>
            <TextBlock Text="Border学习" FontSize="20" Width="120" Background="#FFEAEAEA"/>
        </Border>

显示标明:

<Border>
                <Border.Child>
                    <TextBlock Width="180"/>
                </Border.Child>
            </Border>

第五:文本内容(了解)

这种需要满足一定的条件进行使用:

【1】类必须声明一个内容属性,并且该内容属性是可以赋值给字符串类型。比如ContentControl
【2】类型必须声明一个类型转换器,该类型转换器将文本内容用作其初始化文本。
【3】类型必须为已知的xaml语言基元。

第六:内容属性和集合语法组合使用

        <StackPanel>
            <Button Height="30" Content="按钮1" Background="Yellow"/>
            <Button Height="30" Content="按钮2" Background="Green"/>
            <Button Height="30" Content="按钮3" Background="Pink"/>
        </StackPanel>

注意:大小写和空白
XAML种区分大小写,通常对象元素、属性元素和特性名称必须区分大小写。
XAML处理器和程序会忽略或删除无意义的空白,并且规范有意义的空白。

7. 标记扩展

标记扩展:指的是给特性语法提供值得时候,用大括号{}标记扩展。 , 那这个就很好理解了啊 ,像绑定 ,样式 ,触发器什么的使用的就是这个

常用的标记扩展:

  1. Binding:用于数据的绑定(绑定表达式)
  2. StaticResource:用于静态资源的引用
  3. DynamicResource:用于动态资源的引用

8. 类型转换器

<StackPanel>
                <Button Margin="10,20,10,30" Content="点击我" />
                <Button Content="同样点击我">
                    <Button.Margin>
                        <Thickness
                            Bottom="30"
                            Left="10"
                            Right="10"
                            Top="20" />
                    </Button.Margin>
                </Button>
            </StackPanel>

通过Thinkness转换器,可以将四个关键属性作为新实例特性。| 说实话这里还是有好多我是没有掌握的 ,所以后续就需要自己慢慢的去进行一个学习

5. XAML根元素和XAML命名空间

根元素:一个xaml文件只有一个根元素,能保证XML文件和XAML格式正确并有效。

常见根元素:页面使用的根元素:Window、Page

外部字典使用的根元素:ResourceDictionary应用程序定义使用的根元素:Application用户控件页面

根元素包含特性xmlns和xmlns:x

代码展示:

<Window x:Class="_001_MyFirstWPFApp.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:_001_MyFirstWPFApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

6. x:前缀

  1. x:Key: 为ResourceDictionary(或其他框架中的类似字典概念)中的每个资源设置唯一的键
  2. x:Class:向xaml页面中提供隐藏代码类指向命名空间和类名。
  3. x:Name:给对象元素指定实例名,通常命名元素可以使用Name属性去给对象元素指定名称。如果元素没有Name,此时可以使用x:Name指定,二者等效
  4. x:Static 启用一个返回静态值的引用,该静态值只能是一个XAML兼容属性。
  5. x:Type 根据类型名称构造一个Type引用,用于指定采用Type 如Style.TargetType

7. 附加属性

语法:所有者类型.属性名

<DockPanel>
    <Button DockPanel.Dock="Left">第一个按钮</Button>
    <Button DockPanel.Dock="Right">第一个按钮</Button>
</DockPanel>

快捷键:ctrl+k+c 撤销:ctrl+k+u

  • 注释:

WPF中常见四个比较重要的属性:
Margin:外边距 | 它的使用方式是这样子的:Margin = "左 ,上 ,右 ,下"

<Button Content="Margin使用" Height="30" Margin="0 , 10 , 0 , 0"/>

Padding:内边距
HorizontalAlignment:表示元素在父元素中的水平对齐方式(左、中、右、铺满)。
VerticalAlignment:表示元素在父元素中的垂直对齐方式(上、中、下、铺满)

Margin:四个值,分别是左、上、右、下

Margin为一个的时候,表示四个方向都有距离

Margin为2个值:左右 和上下
Margin="20,0"


Border : 装饰器元素

posted @ 2025-12-10 18:28  恨水长秋  阅读(43)  评论(0)    收藏  举报