整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

WPF - 1.XAML基础

XAML是派生自XML的可扩展应用程序标记语言(Extensible Application Markup Language),由微软创造。XML是一种可扩展标记语言,与HTML类似,但是它是传输数据,而非显示数据,XML标签没有预定义,需要自行定义标签WPF(Windows Presentation Foundation)是微软新一代图形系统,绘图技术的改进基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。由两个主要部分组成:引擎和编程框架。

正文

命名空间

xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml——这表示利用x代替XAML的命名空间。用于包含特定的关键字和System.Windows.Markup中类型的子集。xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation——另一个命名空间。映射诸多wpf.net命名空间(system.windows.xxx,是个一对多的映射,主要封装了三个程序集中,WindowsBase.dll、Presentation.dll和PresentationFramework.dll)

x: 前缀

x:Class='MyXaml.Window1' ——利用class特性指定c#类名(后台c#代码) x:Key:为 ResourceDictionary(或其他框架中的类似字典概念)中的每个资源设置唯一的键。 在典型的 WPF 应用标记中的所有 x: 用法中,x:Key 可能占到 90%。 x:Name:处理对象元素后,为运行时代码中存在的实例指定运行时对象名称。 x:Static:启用一个返回静态值的引用,该静态值不是与 XAML 兼容的属性。 x:Type:根据类型名称构造 Type 引用。

属性元素

一般的,我们想要对一个标签的属性赋值,可以直接在标签内部键入属性名给其赋值,如我们给button的Content属性赋值:

<Grid x:Name="grid1">
<tag>  
    <tag.property>   
         value 
     </tag.property>
</tag>
<Button>
            <Button.Content>this is test</Button.Content>
            <Button.Background>
                <SolidColorBrush Color="Red"></SolidColorBrush>
            </Button.Background>
</Button>

集合语法

XAML 语言包含一些优化,可以生成更易于阅读的标记。 其中一项优化是:如果某个特定属性采用集合类型,则在标记中声明为该属性的值内的子元素的项将成为集合的一部分。 在这种情况下,子对象元素的集合是设置为集合属性的值。

<Grid>
    <Grid.Background>
        <LinearGradientBrush>
            <GradientStop Offset="0" Color="Red"></GradientStop>
            <GradientStop Offset="1" Color="Green"></GradientStop>
        </LinearGradientBrush>
    </Grid.Background>
</Grid>

内容属性和集合语法组合

<StackPanel>
    <Button>First Button</Button>
    <Button>Second Button</Button>
    <StackPanel>
        <StackPanel.Children>
            <Button>First Button</Button>
            <Button>Second Button</Button>
        </StackPanel.Children>
    </StackPanel>
</StackPanel>

特性语法(事件)

<Button Content="Button" Click="Button_Click"></Button>

类型转换器

Thickness 结构是一个类型示例,该类型拥有可使用 XAML 的类型转换。 Thickness 指示嵌套矩形中的度量,可用作属性(如 Margin)的值。 通过对 Thickness 放置类型转换器,所有使用 Thickness 的属性都可以更容易地在 XAML 中指定,因为它们可指定为特性。

<Button Margin="10,20,10,30" Content="Click me"/>
<Button Content="Click me">
    <Button.Margin>
        <Thickness Left="10" Top="20" Right="10" Bottom="30"/>
    </Button.Margin>
</Button>

注意:

XAML是大小写敏感的,所以不能使用<button>代替<Button>,但类型转换器通过不是大小写敏感的,这意味着 Foreground="White" 和 "Foreground="white"具有相同的效果。

  • WPF中的XAML具有如下自身的特性:
  • 每个XAML文档都映射到一个.NET类的实例。元素名将与.NET 类名严格的匹配。
  • 在XMl文档中,可以在一个元素中嵌套另一个元素,这种嵌套关系将会形成一个元素的树状结构
  • 可以通过设置元素属性来为每个类的属性赋值。XAML提供提供了属性元素语法来为复杂的属性进行赋值。
  • 与XML相似,每个XAMl文件都只能有一个根元素,并且必须具有两个命名空间

注释

语法:<!--被注释的内容-->

  • 只能出现在开始标签和结束标签之间
  • 不能注释标签的Attribute
  • 注释不能嵌套

eb与WPF(Windows Presentation Foundation)的融合是一种将两种技术结合起来的方法,可以实现双边互补,为应用程序开发带来更丰富的用户体验和功能。


Web技术在跨平台、可访问性和用户界面的灵活性方面具有明显的优势。通过使用HTML、CSS和JavaScript等技术,可以轻松地创建具有响应式设计和适应不同设备的网页应用。Web应用还可以通过云平台进行部署和访问,实现跨平台和远程协作的优势。



而WPF是一种基于Windows操作系统的桌面应用程序开发技术,它提供了丰富的用户界面和多媒体功能。WPF应用程序可以充分利用Windows操作系统的特性,如窗口管理、本地文件系统访问和硬件加速等。WPF还提供了强大的数据绑定和可视化效果,使开发人员能够创建出具有高度交互性和视觉吸引力的应用程序。




将Web和WPF融合起来可以实现双边互补的优势。具体而言,可以通过以下方式实现:

嵌入Web内容:在WPF应用程序中嵌入Web浏览器控件,以展示Web页面或运行Web应用。这样可以在WPF应用程序中轻松集成Web内容,例如显示实时数据、集成第三方服务或展示在线媒体。




使用Web技术扩展WPF应用:在WPF应用程序中使用Web技术,如HTML、CSS和JavaScript,来增强用户界面和交互性。通过使用Web技术,可以实现更灵活的布局、动态内容更新和响应式设计,以提供更好的用户体验。




使用WPF嵌入式浏览器控件:在Web应用程序中嵌入WPF的嵌入式浏览器控件,以利用WPF的功能和特性。这样可以在Web应用程序中使用WPF的强大渲染能力、多媒体支持和数据绑定,提供更丰富的用户体验。




共享数据和状态:Web和WPF应用程序可以通过共享数据和状态来实现双向通信和协作。通过使用Web API和WPF应用程序之间的数据传输,可以实现数据的同步和更新,保持应用程序之间的一致性。




综上所述,Web与WPF的融合可以实现双边互补,为应用程序开发带来更丰富的用户体验和功能。通过合理地结合Web和WPF技术,开发人员可以充分发挥两者的优势,创造出更具创新性和吸引力的应用程序。

源WPF控件库推荐:ModernWpf

ModernWpf仓库信息

站长从博客园 林德熙 处了解到此控件库,通过clone、编译、运行,发现这库确实不错,正如 林德熙 所言:“有十分漂亮的界面,整个都是 Win10 风,界面部分和默认 UWP 相近, 这个库支持了 .NET Framework 4.5 和以上的版本,以及 .NET Core 3.0 和以上的版本,可以在 Windows Vista SP2 和以上的系统运行。” 本人遂从该仓库中将readme搬运过来,希望让更多人知道有这个库的存在,能给WPF开发者多一个UI库选择。

白色主题

快速开始

  1. 创建一个WPF应用
  2. 从NuGet中安装包 ModernWpfUI.
  3. 编辑 App.xaml:

代码语言:javascript

复制

<Application
    ...
    xmlns:ui="http://schemas.modernwpf.com/2019">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ui:ThemeResources />
                <ui:XamlControlsResources />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
  1. 编辑 MainWindow.xaml:

代码语言:javascript

复制

<Window
    ...
    xmlns:ui="http://schemas.modernwpf.com/2019"
    ui:WindowHelper.UseModernWindowStyle="True">
    <ui:SimpleStackPanel Margin="12" Spacing="24">
        <TextBlock Text="My first ModernWPF app" Style="{StaticResource HeaderTextBlockStyle}" />
        <Button Content="I am a button" />
        <Button Content="I am an accent button" Style="{StaticResource AccentButtonStyle}" />
    </ui:SimpleStackPanel>
</Window>

部分截图

黑色主题

ControlPalette1

Nighttime

NumberBox

ContentDialog

DataGrid

ItemsRepeater

CustomTitleBar.Dark

Calendar

Menu

Progress

ColorRamp

AccentColorPalette

HighContrast.png

其他控件库介绍:

  1. 国内开源C# WPF控件库Panuon.UI.Silver推荐
  2. 《Dotnet9》系列-开源C# WPF控件库3《HandyControl》强力推荐
  3. (四)开源C# WPF控件库《AduSkin – UI》