您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496net可视化程序设计基础,如何实现自适

新葡亰496net可视化程序设计基础,如何实现自适

发布时间:2019-11-30 06:15编辑:奥门新萄京娱乐场浏览(85)

    作为一个刚刚接触C#和XAML的新手,首先就是要搞清楚这二者之间的关系。XAML的中文名称为可扩展应用程序标记语言,而C#则是运行于.NET Framework之上的高级程序设计语言,可以理解为使用XAML制作UWP的用户使用界面,而使用C#来完成内部的逻辑实现。

    新葡亰496net 1

    系列文章

    新葡亰496net 2

    简单类比QT应该就是.ui文件和.cpp文件区别。可视化程序设计我只接触过QT,对于网站设计并不了解,所以对于XAML这种类似于HTML的标记语言不熟,还需要加紧学习。

    点击这里转到我的Github查看本项目源代码
    https://github.com/Needer28/naivePlayer

    UWP入门教程1——UWP的前世今生

    点击这里转到我的Github查看本项目源代码
    https://github.com/Needer28/naivePlayer

    在看完大部分XAML控件后,和我之前接触的QT进行对比,我发现大部分的特性都很类似,比如说在设计时界面与内部实现分开,所见即所得等。但对于XAML我发现了很多有趣的地方。

    前言

    在媒体播放器之前认真了解了老师对我们的要求,其中基本的视频及音频播放器功能我们早已经实现了,但是这次老师又给我们出了新的难题

    神坑官方文档 各种博客是一个不错的选择

     

    前言

    在媒体播放器之前认真了解了老师对我们的要求,其中视频播放的实现其实并不难,对于C#来讲不过是一个控件的问题
    之前也用C#实现郭类似的共能,但是只是将资源文件放在Assets文件夹下,并没有实现资源文件自由选取,且实现.mp3和.mp4文件的自由选取,这是此次作业的重点吧

    无论什么时候,官方文档永远是最好的选择


    Chapter 1--本次增加的功能

    • 允许用户在线播放 *.MP3 文件(比如咱们的校歌)
    • 允许用户下载网页上的 *.MP3 文件
    • 可以边下边播 *.MP3 文件
    • 下载到Music文件夹(不能用Hard Code)

    如上文所说的,布局面板根据可用的屏幕空间,指定界面元素的大小和位置。例如StackPanel 会水平或垂直排列界面元素。Grid 布局与CSS 中的表格控件类似,可将各元素按单元排列。

    Chapter 1--实现的功能

    • 允许用户选择.mp3或.mp4文件
    • 相应播放文件
    • 拖动实现快进或返回
    • 适应屏幕宽度
    • 音量调整
    • 纵横比调整

    虽然直接把控件拖拽过去就有这些功能,除了文件选择!

    新葡亰496net 3

    MP3及MP4文件的选取

    新葡亰496net 4

    MP3文件(超能陆战队主题曲immortals)播放示例

    虽然什么都看不到,也听不到,但是它就是超能陆战队主题曲immortals

    新葡亰496net 5

    MP4文件(超能陆战队)播放示例

    这个可以看到,是超能陆战队,没错我就是用自己制作的播放器把超能陆战队看完的

     

    Chapter 2--功能演示

    新葡亰496net 6

    输入URL播放在线音频文件示例

    新葡亰496net 7

    输入URL下载并播放在线音频文件示例

    新提供的 RelativePanel 即相对布局,各个元素之间存在相对关系,可用来创建自适应界面。当用户设备发生变化时,用户界面也会重新排列重新组织,而有了RelativePanel就省去了界面元素重新排列。

    Chapter 2--技术细节

    其实说实话,制作这个媒体播放器我是真的没有遇到什么困难,但是有一些点还是需要我们注意下或者需要我们可能参考到的

    技术问题:FileOpenPicker的使用

    起初我以为在XAML的控件当中会有这么一个文件选取器,但是我还是高估了XAML所能实现的功能,于是文件选取器就先被我放在一边没有,先是在XAML Controls Gallery当中查看了 MediaElement的使用,并通过它找到微软官方的极其详细方便的文档。
    MediaElement Class官方文档点这里

    在浏览官方文档的时候,我突然就发现了这么一个method——SetSourse,然后冥冥之中就是感觉这就是我要的,然后就顺理成章地把这么一个文件选取的功能实现
    MediaElement.SetSource(IRandomAccessStream, String) Method官方文档点这里

    新葡亰496net 8

    MediaElement下的SetSourse方法

    所以呢,又是顺理成章地,我突然发现SetSourse中有这么一个例子

    新葡亰496net 9

    SetSourse方法中的良心示例

    XAML

    <MediaElement x:Name="mediaControl" Height="400" />
    

    C#

    async private void SetLocalMedia()
    {
        var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
    
        openPicker.FileTypeFilter.Add(".mp4");//这两句实现了文件过滤
        openPicker.FileTypeFilter.Add(".mp3");
    
        var file = await openPicker.PickSingleFileAsync();
    
        // mediaControl is a MediaElement defined in XAML
        if (null != file)
        {
            var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
            mediaControl.SetSource(stream, file.ContentType);//这个应该叫数据绑定?
            mediaControl.Play();
        }
    }
    

    没错,就是这么简单,微软官方的文档简直良心

    首先就是最令我感到奇怪的一点,就是我没有找到UWP在电脑端对鼠标图标的改变,例如在QT中,我们可以通过设置这样一个属性

    Chapter 3--技术细节

    其实说实话,本次的作业感觉有很多坑是我们必须要踩的,本次作业也让我认识到即使是微软的官方文档也是真的不靠谱

    如图所示,无论用户使用哪种设备,蓝色按钮始终放在文本框右侧,并排放在黄色按钮顶部。

    Chapter 2--我的实现

    其实呢,我的实现基本上基于以上微软官方文档给的示例,无非是拖拽了一个MediaElement控件,加了一个Button,并通过其click方法调用文件选取器部分代码
    我的XAML代码

    <Page
        x:Class="naivePlayer.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:naivePlayer"
        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}">
            <MediaElement Name="mediaPlayer" AutoPlay="False" AreTransportControlsEnabled="True" HorizontalAlignment="Left" Height="913" Margin="0,37,0,0" VerticalAlignment="Top" Width="1430"/>
            <Button Content="文件选取" Name="filePicker" Click="filePicker_Click" HorizontalAlignment="Right" VerticalAlignment="Top"/>
    
        </Grid>
    </Page>
    

    XAML代码中添加了一个MediaElement用来播放媒体文件,一个Button用调用文件选取其部分代码

    我的C#代码

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    namespace naivePlayer
    {
        /// <summary>
        /// 可用于自身或导航至 Frame 内部的空白页。
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
            }
    
            async private void SetLocalMedia()
            {
                var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
                openPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;//使用图片缩略图创建丰富的视觉显示
                openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
    
                openPicker.FileTypeFilter.Add(".mp4");//确定选取文件的后缀名
                openPicker.FileTypeFilter.Add(".mp3");
    
                var file = await openPicker.PickSingleFileAsync(); //选取单个文件
    
                // mediaPlayer is a MediaElement defined in XAML
                if (null != file)
                {
                    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                    mediaPlayer.SetSource(stream, file.ContentType);
                    mediaPlayer.Play();
                }
            }
    
            private void filePicker_Click(object sender, RoutedEventArgs e) //此处通过点击事件调用了
                                                                            // SetLocalMedia()来显示文件选取器
            {
                SetLocalMedia();
            }
        }
    }
    

    C#代码中按照微软官方文档的样子写了一个SetLocalMedia()方法用来实现一个文件选取器,实现了一个filePicker_Click(object sender, RoutedEventArgs e)方法用来通过点击事件调用SetLocalMedia()方法

    新葡亰496net 10

    技术问题1:如何在线播放MP3文件**

    本功能其实比较简单,并没有我最初想象的那么难(当然这是现在以一个已经完成这个功能的视角来看)。
    最初呢,我对怎么实现下载这样一个功能没有一点头绪,只能求助于搜索引擎。

    我搜索了“UWP 下载网页文件”这样一条关键词,搜索引擎返回的第一条结果吸引了我对注意:

    新葡亰496net 11

    “UWP 下载网页文件”搜索结果

    点击转到该网址
    点开之后是这个:

    新葡亰496net 12

    网页搜索结果

    新葡亰496net可视化程序设计基础,如何实现自适应用户界面。一看就很有用,本篇博客也的确为我后续的实现下载功能提供了帮助,但是截至目前它并不能帮助我实现在线播放音频的功能,所以此处暂时先按下不表

    既然它并不能帮助我,于是我又开始了新的搜索,接下来我搜索的关键词是“uwp 播放网页文件,这一次在搜索结果当中看到一条微软社区当中的一条回答”

    新葡亰496net 13

    uwp 播放网页文件搜索结果

    点击转到该网址
    点开之后是这个:

    新葡亰496net 14

    网页搜索结果

    这次的结果感觉靠谱多了,也简单多了,于是顺利地,通过适当修改以上代码,我把它消化成了自己的代码、自己的知识
    C#实现在线播放MP3文件

    private void playOnlineUrl_Click(object sender, RoutedEventArgs args)
            {
                Uri pathUri = new Uri(onlineUrl.Text);
                mediaPlayer.Source = pathUri;
                mediaPlayer.Play();
            }
    

    没错,就是这么简单,区区三行代码,从不拖泥带水,没有纷繁复杂
    这三行代码分别做了三件事:

    • 获取用户输入到onlineUrl这个TextBox中的网址链接的Uri
    • 将媒体资源设置为以上Uri
    • 播放该资源

    新葡亰496net 15

    Chapter 3--未来的展望

    其实本次实现的播放器只是把老师要求的功能实现了,还有很多不能尽如人意的地方,比如,当我打开一个MP3文件时,只能看到一个进度条在不断的动,连我打开的是那首歌都看不到,这是不能令我满意的,针对这个缺陷,日后可以考虑加一个TextBlock显示打开的文件名

    总之,需要改进的地方还有很多,不令人满意的地方也还有很多,我想对于用户来说,只有功能绝对不够,要怎么让我们的软件更方便、更易于使用才是我们开发者需要追寻的目标

    来使得鼠标在移向该按钮后变为手指标识,但在UWP中我没有看到按钮有这样的属性,在我使用的网易云音乐中鼠标也没有变化,一直是处于箭头状态,所以很多时候都不清楚一些按钮能否点击。我猜测是因为其跨平台的特性,在移动端以及穿戴式设备上不需要这方面的功能。但我觉得对于已经养成习惯的计算机用户来说,是有些不习惯的。

    技术问题2:如何下载网页上的MP3文件**

    本功能就要比上一个功能要难很多了,而且还有一些坑是我们躺过了才会懂的

    针对这个功能我在网上查到了很多方法,可能大约有3~4种吧,我就试了其中两种,有一个微软官方提供的方法,结果代码直接拷过来不能用,另外一种是我在博客上找的,当然也是在左调右调就是不行,然后又跟同学讨论,最终发现竟然还有更改权限这个事,而且还是通过可视化界面设置的,不是通过C#来控制,这个简直是让人十分想吐槽,因为直觉上来讲这种事情怎么的也应该交给程序来解决,最后怎么感觉变成了需要我们设置一些东西,反正简直是反人类

    在浏览官方文档的时候,我突然就发现了这么一个method——SetSourse,然后冥冥之中就是感觉这就是我要的,然后就顺理成章地把这么一个文件选取的功能实现
    MediaElement.SetSource(IRandomAccessStream, String) Method官方文档点这里

    新葡亰496net 16

    MediaElement下的SetSourse方法

    所以呢,又是顺理成章地,我突然发现SetSourse中有这么一个例子

    新葡亰496net 17

    SetSourse方法中的良心示例

    XAML

    <MediaElement x:Name="mediaControl" Height="400" />
    

    C#

    async private void SetLocalMedia()
    {
        var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
    
        openPicker.FileTypeFilter.Add(".mp4");//这两句实现了文件过滤
        openPicker.FileTypeFilter.Add(".mp3");
    
        var file = await openPicker.PickSingleFileAsync();
    
        // mediaControl is a MediaElement defined in XAML
        if (null != file)
        {
            var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
            mediaControl.SetSource(stream, file.ContentType);//这个应该叫数据绑定?
            mediaControl.Play();
        }
    }
    

    没错,就是这么简单,微软官方的文档简直良心

    XAML 代码如下:

    后语

    需要学的还有很多,有很多功能我们只会做也不够,怎么做好才是我们真正需要考虑的问题

    欢迎大家关注我的微信公众号“NEU学堂”

    新葡亰496net 18

    学堂君欢迎你的到来


    ~~虽然小编经常托更,而且一托就是好几个月,但这并不妨碍它是一个极好的公众号~~

    新葡亰496net 19


    Chapter 2--我的实现

    其实呢,我的实现基本上基于以上微软官方文档给的示例,无非是拖拽了一个MediaElement控件,加了一个Button,并通过其click方法调用文件选取器部分代码
    我的XAML代码

    <Page
        x:Class="naivePlayer.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:naivePlayer"
        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}">
            <MediaElement Name="mediaPlayer" AutoPlay="False" AreTransportControlsEnabled="True" HorizontalAlignment="Left" Height="913" Margin="0,37,0,0" VerticalAlignment="Top" Width="1430"/>
            <Button Content="文件选取" Name="filePicker" Click="filePicker_Click" HorizontalAlignment="Right" VerticalAlignment="Top"/>
    
        </Grid>
    </Page>
    

    XAML代码中添加了一个MediaElement用来播放媒体文件,一个Button用调用文件选取其部分代码

    新葡亰496net,我的C#代码

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    namespace naivePlayer
    {
        /// <summary>
        /// 可用于自身或导航至 Frame 内部的空白页。
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
            }
    
            async private void SetLocalMedia()
            {
                var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
                openPicker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;//使用图片缩略图创建丰富的视觉显示
                openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
    
                openPicker.FileTypeFilter.Add(".mp4");//确定选取文件的后缀名
                openPicker.FileTypeFilter.Add(".mp3");
    
                var file = await openPicker.PickSingleFileAsync(); //选取单个文件
    
                // mediaPlayer is a MediaElement defined in XAML
                if (null != file)
                {
                    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                    mediaPlayer.SetSource(stream, file.ContentType);
                    mediaPlayer.Play();
                }
            }
    
            private void filePicker_Click(object sender, RoutedEventArgs e) //此处通过点击事件调用了
                                                                            // SetLocalMedia()来显示文件选取器
            {
                SetLocalMedia();
            }
        }
    }
    

    C#代码中按照微软官方文档的样子写了一个SetLocalMedia()方法用来实现一个文件选取器,实现了一个filePicker_Click(object sender, RoutedEventArgs e)方法用来通过点击事件调用SetLocalMedia()方法

    <RelativePanel>
        <TextBox x:Name="textBox1" Text="textbox" Margin="5"/>
        <Button x:Name="blueButton" Margin="5" Background="LightBlue" Content="ButtonRight" RelativePanel.RightOf="textBox1"/>
        <Button x:Name="orangeButton" Margin="5" Background="Orange" Content="ButtonBelow" RelativePanel.RightOf="textBox1" RelativePanel.Below="blueButton"/>
    </RelativePanel>

    其次就是MediaElement & MediaPlayerElement这两个控件,看介绍是说一个旧一个新,但MediaPlayerElement有什么新的特性我并没有找到,也并不清楚是从头实现了一个新类还是只是将原来的MediaElement改了名字,不过相信微软这么做一定是有一些道理的。

    Chapter 3--未来的展望

    其实本次实现的播放器只是把老师要求的功能实现了,还有很多不能尽如人意的地方,比如,当我打开一个MP3文件时,只能看到一个进度条在不断的动,连我打开的是那首歌都看不到,这是不能令我满意的,针对这个缺陷,日后可以考虑加一个TextBlock显示打开的文件名

    总之,需要改进的地方还有很多,不令人满意的地方也还有很多,我想对于用户来说,只有功能绝对不够,要怎么让我们的软件更方便、更易于使用才是我们开发者需要追寻的目标

    新葡亰496net可视化程序设计基础,如何实现自适应用户界面。使用可视化状态触发器创建自适应UI

    UWP 提供自适应可视化状态,可根据窗口大小来调整状态值。StateTriggers定义了一个阈值,达到阈值则触发可视化状态。下面示例了,当窗口大于720像素,wideView 状态则被触发,游戏面板重新排列,如图所示:

    新葡亰496net 20

    当窗口小于720px,则narrowView视态被触发,因为wideView 触发器无法满足条件,NarrowView 状态则将Best-rated games 置于最底端,并且向左对齐,效果图如下:

     

    XAML 代码如下:

     
    
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    
        <VisualStateManager.VisualStateGroups>
    
            <VisualStateGroup>
    
                <VisualState x:Name="wideView">
    
                    <VisualState.StateTriggers>
    
                        <AdaptiveTrigger MinWindowWidth="720" />
    
                    </VisualState.StateTriggers>
    
                    <VisualState.Setters>
    
                        <Setter Target="best.(RelativePanel.RightOf)" Value="free"/>
    
                        <Setter Target="best.(RelativePanel.AlignTopWidth)" Value="free"/>
    
                    </VisualState.Setters>
    
                </VisualState>
    
                <VisualState x:Name="narrowView">
    
                    <VisualState.Setters>
    
                        <Setter Target="best.(RelativePanel.Below)" Value="paid"/>
    
                        <Setter Target="best.(RelativePanel.AlignLeftWithPanel)" Value="true"/>
    
                    </VisualState.Setters>
    
                    <VisualState.StateTriggers>
    
                        <AdaptiveTrigger MinWindowWidth="0" />
    
                    </VisualState.StateTriggers>
    
                </VisualState>
    
            </VisualStateGroup>
    
        </VisualStateManager.VisualStateGroups>
    
        ...
    
    </Grid>
    

     

    新葡亰496net 21

    后语

    需要学的还有很多,有很多功能我们只会做也不够,怎么做好才是我们真正需要考虑的问题

    欢迎大家关注我的微信公众号“NEU学堂”

    新葡亰496net 22

    学堂君欢迎你的到来


    ~~虽然小编经常托更,而且一托就是好几个月,但这并不妨碍它是一个极好的公众号~~

    新葡亰496net 23

    创建UWP可使用的工具

    创建App时,通常会明确目标设备,当需要在设备中预览App,可以使用VS中的Preview toolbar(预览工具箱)查看App,可以模拟不同的设备,如PC,TV,智能手机等。

     

    新葡亰496net 24

    自适应扩展

    Windows 10 引入“缩放模型”的升级版,除了缩放矢量图之外,有一个统一的缩放因子集合,能够保证UI元素在不同的屏幕尺寸和分辨率下,界面元素大小的一致性。缩放因子能够兼容多种操作系统如iOS,Android等,资源科跨多平台共享。

     

     

    通用输入处理

    可使用通用控件创建通用Windows App来管理控制不同的输入模式,如鼠标,键盘,触摸笔,控制器等。本文列举了以下API 来访问输入:

    CoreIndependentInputSource:是新增加的API,可将源输入,迁移到主线程或后台线程。

    PointerPoint:统一了触摸,鼠标,笔数据。具有一致的接口和事件。

    PointerDevice:是设备API,可支持查询设备支持的输入能力。

    新的 InkCanvas XAML 控件和InkPresenter API 可访问Stroke 数据

     

    编写代码

    VS中开发Windows10 项目支持多种开发语言,如C ,C#,VB以及JavaScript。也可以使用XAML,开发原生UI 用户体验。

    调用API来实现目标设备族群

    无论需要调用哪种API,你需要了解API适应的设备族群,是否满足您App开发的需要。如以下代码所示,设备族群是Universal:

     
    
     
    
        Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested  = TestView_BackRequested;
    

     

    当然也可以调用API ,在App中不实现。

    这种情况通常指当你的目标设备族群未在文档中标明,你可以调用此api,修改一些代码即可。

    使用ApiInformation 类编写自适应代码

    编写自适应代码只需要两步,一,确定需要调用的API,二,使用Windows.Foundation.Metadata.ApiInformation 类来测试API 。可用于评估App是否运行良好。

    如果想同时调用很多API,可以使用ApiInformation.IsTypePresent 方法,如下:

       // Note: Cache the value instead of querying it more than once.
    
        bool isHardwareButtonsAPIPresent =
    
            Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons");
    
     
    
        if (isHardwareButtonsAPIPresent)
    
        {
    
            Windows.Phone.UI.Input.HardwareButtons.CameraPressed  =
    
                HardwareButtons_CameraPressed;
    
        }
    

    上述示例中HardwareButtons类实现了CameraPressed事件,因为该类成员有相同的信息需求。

     

    用户体验

    通用Windows App 可利用所有设备特征来呈现App.App可充分利用桌面设备的处理能力,平板电脑的自然交互方式,以及智能手机的便捷性和移动性等。

    良好的设计从确定用户交互方式开始,同时满足App的功能性和外观。用户体验非常重要直接影响了用户是否喜欢你的App,使用过程中是否愉悦或始终保持积极的情绪,而不受阻碍。设计通用App更加需要注意影响用户体验的不同设备因素。

    新葡亰496net 25

    除了设备的交互方式不同,还需要利用跨平台的优点,如:

    • 使用云计算来访问不同设备资源
    • 考虑怎样支持从一种设备迁移到另一种设备之上,并保持一致性。
    • 使用导航设计指南来设计工作流程,使得App可兼容移动设备,较小的屏幕或较大的屏幕设备。
    • 考虑特殊情况,较小的移动设备屏幕失效,也可能有一些功能区在固定式台式机上不起作用,而需在移动设备上才能运行。
    • 考虑如何兼容多种输入形式

    但这个控件本身功能是非常强大的,播放器的基本操作都包含了进去,在QT中如果实现一个差不多功能的控件需要的代码量会很大,而在UWP中仅仅需要一行代码就可以新建一个播放器。这一点是其他可视化编程平台做不到的,但这也引起了一些问题,比如说在QT中我可以定制出一个和其他所有人都不同的个性播放器,而UWP中不知道是否有方法将MediaPlayerElement进行修改,在接下来的学习中我会仔细考虑这个事情。

    通过Dashboard提交通用 Windows 应用

    利用新的通用的 Windows 开发人员中心仪表板,可以在同一位置管理和提交所有面向 Windows 设备的应用。新功能简化了流程,并具有更多的控制权限。

    在进行UWP开发时,还可以借助一些开发工具,有效提高开发效率。ComponentOne Studio for UWP 是一套可以编写所有 UWP 平台应用的控件集,包括表格、报表、图表、仪表盘、组织图、地图、PDF、Excel、Word、日程安排、输入、导航等多个控件,有效的帮助开发过程。

     

    相关阅读:

    微软 Build 2017 开发者大会:Azure 与 AI 的快速发展

    是什么让C#成为最值得学习的编程语言

    从Visual Studio看微软20年技术变迁

    C#开发人员应该知道的13件事情

    Visual Studio 2017正式版发布全纪录

     

     


     

    对于ParallaxView,我第一感觉就是炫酷,相当于直接将图片设置为按钮的背景,同时在用户下滑时还会自动显示图片剩余部分,整个界面瞬间变得高大上了起来,如果有好看的界面相信很多人会摒弃原来单调的背景。

    新葡亰496net 26

     


    然后是pivot这个东西,这个东西很类似QT中存放控件的QStackedLayout,可以存放很多其他控件,根据用户的需求显示不同的界面。原来我认为这个是必须显示title的新葡亰496net 27

     

    然而在亲自实现后才发现如果不设置title和header时,默认是和QStackedLayout一样没有任何显示的。

    新葡亰496net 28


     

    最后是XAML的一些全新的控件:

    RatingControl:新葡亰496net 29

    这个控件感觉就是官方钦定了一种给软件或产品打分的方式,为程序员节省了自己编写打分程序的时间,并且比使用数字框更加直观。相信在程序员自己定义打分的图形后,比如说把新型换成笑脸等等会使打分功能更加个性化。

    RepeatButton:新葡亰496net 30

    看起来和普通按钮类似,但点击鼠标后只要不松开就一直会触发某种事件,和QT中重写了MouseRelease的Button很像。不过有一点不同的是当鼠标按住并拖动到按钮外时,计数就会停止,这意味着这个按钮不仅监控鼠标按下松开事件,并且还监控了鼠标的位置。

    InkCanvas:新葡亰496net 31

    一个功能十分简单,代码也十分简单的内置画图工具,对于一些需要手写文字或简单画图的场合十分适用。但因为功能太简单,暂时也不清楚拓展性如何,所以对于windows自带的画图工具来说还是有些差距。


    以上是我比较感兴趣的控件,感觉UWP整体上非常适合在PC端编写windows应用,并且听说UWP的程序可以直接在其他平台上如windows phone等直接运行,不必过多考虑兼容性的问题,相信这也是C#语言崛起的一大原因吧。

     

     

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496net可视化程序设计基础,如何实现自适

    关键词: