MK
摩柯社区 - 一个极简的技术知识社区
AI 面试

Visual Basic UWP通用Windows平台开发

2023-04-205.1k 阅读

一、Visual Basic 与 UWP 概述

Visual Basic 是一种由微软开发的结构化、模块化、面向对象的编程语言。它具有简单易学、开发效率高的特点,在 Windows 开发领域有着广泛的应用。而通用 Windows 平台(UWP)则是微软推出的一个统一的应用开发平台,允许开发者创建能够在多种 Windows 设备上运行的应用,包括桌面电脑、平板电脑、手机、Xbox 等。

使用 Visual Basic 进行 UWP 开发,能够充分利用 Visual Basic 的语言优势,结合 UWP 的跨设备特性,快速创建出功能丰富、用户体验良好的应用程序。

二、UWP 开发环境搭建

  1. 安装 Visual Studio 首先,需要下载并安装 Visual Studio。可以从微软官方网站下载最新版本的 Visual Studio。在安装过程中,选择“通用 Windows 平台开发”工作负载。这将安装开发 UWP 应用所需的工具、SDK 和模板。

  2. 创建 UWP 项目 打开 Visual Studio 后,点击“创建新项目”。在项目模板中,选择“Visual Basic”下的“通用 Windows 平台”,然后选择“空白应用(通用 Windows)”模板。在弹出的“新通用 Windows 项目”对话框中,设置项目名称和位置,然后点击“确定”。

三、UWP 应用界面设计基础

  1. XAML 基础 UWP 应用的界面主要使用可扩展应用程序标记语言(XAML)来设计。XAML 是一种声明式语言,用于描述 UI 的结构和外观。 例如,以下是一个简单的 XAML 代码片段,用于创建一个包含文本块和按钮的界面:
<Page
    x:Class="MyUWPPApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyUWPPApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock x:Name="myTextBlock" Text="Hello, UWP!" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"/>
        <Button x:Name="myButton" Content="Click Me" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,50" Click="myButton_Click"/>
    </Grid>
</Page>
  1. 控件使用 UWP 提供了丰富的控件库,如按钮(Button)、文本框(TextBox)、列表视图(ListView)等。以按钮为例,除了设置其内容和位置外,还可以为其添加点击事件。在上述代码中,按钮的 Click 事件关联到了 myButton_Click 方法。

四、Visual Basic 代码与 XAML 交互

  1. 事件处理 回到 Visual Basic 代码文件(通常是 MainPage.xaml.vb),可以编写事件处理方法。例如:
Public NotInheritable Class MainPage
    Inherits Page

    Public Sub New()
        InitializeComponent()
    End Sub

    Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
        myTextBlock.Text = "Button Clicked!"
    End Sub
End Class

在这个例子中,当按钮被点击时,文本块的文本会被更新为“Button Clicked!”。

  1. 数据绑定 数据绑定是将 UI 元素与数据对象连接起来的机制。假设我们有一个包含姓名和年龄的类:
Public Class Person
    Public Property Name As String
    Public Property Age As Integer
End Class

在 XAML 中,可以这样绑定数据:

<Page
    x:Class="MyUWPPApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:MyUWPPApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBlock Text="{Binding Name}" FontSize="20"/>
            <TextBlock Text="{Binding Age}" FontSize="20"/>
        </StackPanel>
    </Grid>
</Page>

在 Visual Basic 代码中:

Public NotInheritable Class MainPage
    Inherits Page

    Public Sub New()
        InitializeComponent()
        Dim person As New Person()
        person.Name = "John"
        person.Age = 30
        DataContext = person
    End Sub
End Class

这样,UI 元素就会显示 Person 对象的属性值。

五、UWP 应用功能开发

  1. 文件操作 UWP 应用可以进行文件的读取和写入操作。例如,要读取文本文件内容:
Imports Windows.Storage

Public NotInheritable Class MainPage
    Inherits Page

    Public Async Sub ReadTextFile()
        Dim folder = ApplicationData.Current.LocalFolder
        Dim file = Await folder.GetFileAsync("test.txt")
        Dim text = Await FileIO.ReadTextAsync(file)
        myTextBlock.Text = text
    End Sub
End Class

要写入文件:

Public Async Sub WriteTextFile()
    Dim folder = ApplicationData.Current.LocalFolder
    Dim file = Await folder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting)
    Await FileIO.WriteTextAsync(file, "This is some text.")
End Sub
  1. 网络请求 可以使用 Windows.Web.Http 命名空间进行网络请求。例如,发送一个 GET 请求:
Imports Windows.Web.Http

Public NotInheritable Class MainPage
    Inherits Page

    Public Async Sub SendHttpRequest()
        Dim client As New HttpClient()
        Dim response = Await client.GetAsync(New Uri("https://example.com/api/data"))
        If response.StatusCode = HttpStatusCode.Ok Then
            Dim content = Await response.Content.ReadAsStringAsync()
            myTextBlock.Text = content
        End If
    End Sub
End Class

六、UWP 应用的导航

  1. Frame 和 Page UWP 应用通常使用 Frame 来实现页面导航。Frame 是一个可以容纳多个 Page 的容器。首先,创建多个 Page,例如 MainPage.xamlSecondPage.xaml。 在 MainPage.xaml 中添加一个按钮来导航到 SecondPage
<Button x:Name="navButton" Content="Navigate to Second Page" HorizontalAlignment="Center" VerticalAlignment="Center" Click="navButton_Click"/>

MainPage.xaml.vb 中:

Public NotInheritable Class MainPage
    Inherits Page

    Public Sub New()
        InitializeComponent()
    End Sub

    Private Sub navButton_Click(sender As Object, e As RoutedEventArgs)
        Dim rootFrame = Window.Current.Content.TryCast(Of Frame)
        If rootFrame IsNot Nothing Then
            rootFrame.Navigate(GetType(SecondPage))
        End If
    End Sub
End Class
  1. 传递参数 在导航时,可以传递参数。例如,在 MainPage 导航时传递一个字符串:
Private Sub navButton_Click(sender As Object, e As RoutedEventArgs)
    Dim rootFrame = Window.Current.Content.TryCast(Of Frame)
    If rootFrame IsNot Nothing Then
        rootFrame.Navigate(GetType(SecondPage), "Hello from Main Page")
    End If
End Sub

SecondPage.xaml.vb 中接收参数:

Public NotInheritable Class SecondPage
    Inherits Page

    Public Sub New()
        InitializeComponent()
    End Sub

    Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
        MyBase.OnNavigatedTo(e)
        If e.Parameter IsNot Nothing Then
            Dim message = e.Parameter.ToString()
            myTextBlock.Text = message
        End If
    End Sub
End Class

七、UWP 应用的资源管理

  1. 字符串资源 在 UWP 应用中,可以将字符串集中管理在资源文件中。在项目中右键点击,选择“添加” -> “新建项”,然后选择“资源文件”,命名为 Resources.resw。 在 Resources.resw 中添加一个字符串资源,例如键为 WelcomeMessage,值为“Welcome to our app”。 在 XAML 中使用该资源:
<TextBlock Text="{StaticResource WelcomeMessage}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
  1. 图像资源 将图像文件添加到项目中,例如 logo.png。在 XAML 中显示图像:
<Image Source="Assets/logo.png" HorizontalAlignment="Center" VerticalAlignment="Center"/>

可以通过设置图像的 WidthHeight 属性来调整其大小,或者使用 Stretch 属性来控制图像的拉伸方式,如 Uniform 保持纵横比缩放,Fill 填充整个区域等。

八、UWP 应用的调试与发布

  1. 调试 在 Visual Studio 中,可以使用调试工具来查找和修复代码中的错误。设置断点,然后点击“调试” -> “开始调试”(或按 F5)运行应用。当应用执行到断点处时,会暂停执行,此时可以查看变量的值、调用堆栈等信息。 例如,如果在文件读取代码处设置断点:
Public Async Sub ReadTextFile()
    Dim folder = ApplicationData.Current.LocalFolder
    Dim file = Await folder.GetFileAsync("test.txt") '设置断点在此处
    Dim text = Await FileIO.ReadTextAsync(file)
    myTextBlock.Text = text
End Sub

当应用执行到断点处,可以查看 folderfile 对象的状态,检查文件是否正确获取。

  1. 发布 准备发布应用时,首先要确保应用满足微软应用商店的要求。在 Visual Studio 中,右键点击项目,选择“商店” -> “创建应用包”。按照向导提示操作,选择发布模式(如“内部测试”“提交到商店”等),设置应用版本号、描述等信息。生成应用包后,可以上传到微软应用商店供用户下载和安装。

九、UWP 应用的性能优化

  1. 内存管理 在 UWP 应用中,合理管理内存非常重要。避免创建过多不必要的对象,及时释放不再使用的资源。例如,在处理大型图像或数据集合时,要注意内存的占用。
' 处理完图像后释放资源
Dim bitmap As BitmapImage = New BitmapImage(New Uri("ms-appx:///Assets/largeImage.jpg"))
' 使用完 bitmap 后,设置为 Nothing 让垃圾回收器回收内存
bitmap = Nothing
  1. 异步操作 尽可能使用异步操作来避免阻塞主线程,提高应用的响应性。在前面的文件操作和网络请求示例中,都使用了异步方法,如 Await 关键字。这确保了在等待文件读取或网络响应时,UI 仍然可以响应用户操作。

通过以上对 Visual Basic 在 UWP 通用 Windows 平台开发的介绍,涵盖了从环境搭建、界面设计、功能开发到调试发布以及性能优化等多个方面,希望能够帮助开发者快速上手并创建出高质量的 UWP 应用。