自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

singhwong

c#,uwp

  • 博客(323)
  • 收藏
  • 关注

原创 将控件呈现为圆形

不再需要使用 RoundEffect 将控件呈现为圆形。 最新推荐的方法是使用 EllipseGeometry 来剪辑控件。带有几何图形的剪辑 <Image Source="FacePalm.jpg"> <Image.Clip> <EllipseGeometry RadiusX="100" RadiusY="100"

2021-06-06 23:32:20 276

原创 列表项命令(数据上下文命令)绑定

<ViewCell.ContextActions> <MenuItem Text="删除" Command="{Binding Path=HomeVM.DeleteNoteCommand,Source={x:Reference Name=Home}}" CommandParameter="{Binding .}"

2021-05-15 13:13:01 305

原创 进阶应用

进阶应用命令行命令行????通过在命令行中输入:code --help你可以快速连接到VS Code 的命令行接口。????通过在命令行中输入:code .你可以启动 VS Code 并直接打开当前文件夹。VS Code Insiders 可以通过:code-insiders .来启动。????命令行核心选项????通过命令行管理插件????命令行高级选项...

2021-05-06 11:55:53 278

原创 TableView

MainPage.xaml<?xml version="1.0" encoding="utf-8"?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design"

2021-05-04 01:22:54 145

原创 使用第三方线性渐变效果以及动画

安装NuGet包:MagicGradients开源项目地址:MagicGradients示例xaml<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:magicgradients="clr-n

2021-03-07 17:12:32 133

原创 Behavior(行为)

Behavior创建行为使用Sytle来应用行为创建行为创建一个继承自Behavior或Behavoir的自定义类,其中T是被将附加该行为的控件类型。重写OnAttachedTo方法以执行所需业务逻辑。重写OnDetachingFrom方法以执行所需的清理。 public class NumericValidationBehavior:Behavior<Entry> { protected override void OnAttachedTo(Entr

2021-03-06 18:31:57 1156

原创 Xam.Plugin.Media(未测试)

跨平台图片操作从图片库中选取图片:拍照获取图片:捕获屏幕并保存功能。声明相关权限:iOS:Xamarin.Form 选取图片或拍照获得图片功能。安装NuGet包:Xam.Plugin.Media。从图片库中选取图片: private async Task<string> TakePictureFromLibrary() { var file = await CrossMedia.Current.PickPhotoAsync

2021-03-04 11:19:17 273 1

原创 uwp集合列表数据上下文命令绑定

public class TestCommand : ICommand { public event EventHandler CanExecuteChanged; public bool CanExecute(object parameter) { return true; } public void Execute(object parameter) { ...

2021-03-01 16:44:54 122

原创 切换到UI线程(主线程)

在UWP中,使用await Dispatcher.RunAsync(predicate);来从后台线程访问UI线程。在Xamarin.Forms中,可以使用 Device.BeginInvokeOnMainThread(() => { lblDisplayName.Text = user["displayName"].ToString(); lblGi

2021-02-23 10:08:59 454

原创 使用VS Code将Azure Functions连接到存储(队列的输出绑定)

此示例基于上一个使用VS Code中的Azure Functions扩展创建C#函数(Azure Function))

2021-02-03 16:13:02 330

原创 使用VS Code中的Azure Functions扩展创建C#函数(Azure Function))

使用VS Code中的Azure Function扩展创建C#函数配置环境创建本地项目配置环境[安装Azure Functions Core Tools 3.x](https://docs.microsoft.com/zh-cn/azure/azure-functions/functions-run-local?2. tabs=macos,csharp,bash#install-the-azure-functions-core-tools)Azure Functions 扩展创建本地项目在侧

2021-02-02 18:54:17 622

原创 VS Code 常用设置,编辑中...

VS Code 常用设置,编辑中...Mac 设备从终端命令启动语言的特定设置(常用设置项)这里使用json来配置。Mac 设备从终端命令启动通过在终端中输入code,用户也可以从终端命令行来启动Visual Studio Code。为了能从终端命令行启动,需要把code添加到PATH环境变量中,步骤如下所示。a. 启动 Visual Studio Code。b. 通过 Command+Shift+P快捷键打开命令面板,然后输入并执行 Shell Command: Install ‘code’

2021-02-02 00:58:39 335 1

原创 Json、Xml

序列化与反序列化JSON序列化将结果放在内存中将结果保存到本地使用代码创建Json对象(JObject)从.json文件中读取JSON序列化将.net实例对象转换为json字符串。将结果放在内存中 public class Product { public int ProductID { get; set; } public string ProductName { get; set; } public int SupplierID {

2021-01-29 14:57:00 135 1

原创 C#实现人民币大写

直接贴代码: class Program { static void Main(string[] args) { Random r = new Random(); for(int i = 0;i<=10;i++) { double m = r.Next()/100.0; System.Console.WriteLine(

2021-01-29 10:26:01 617

原创 实现ICommand接口

public class RelayCommand : ICommand { private readonly Action _execute; private readonly Func<bool> _canExecute; public RelayCommand(Action execute,Func<bool> canExecute) { _execute = execute...

2021-01-25 21:54:27 449

原创 单元测试(MSTest)

单元测试其实就是将项目细分为多个最小单元,然后对它们分别进行测试。关于"单元"的说法比较难定型,所谓细分也只是一个相对的逻辑概念。很多时候是与当前项目的具体情况有关。细分的时候有时会以单个类为单元,也有可能以单个窗口为单元。如果将应用程序比喻为一台复杂的机器,其生产过程都有特定的工序。机器有许多的零部件组成,车间先把这些零部件生产出来,最后进行组装。因此,开发者也会考虑到,如果整台机器都组装完成后再进行检测,极有可能遇到很多问题,甚至有些问题很难跟踪查找。要是事先在每个零部件生产出来的时候就进行检验,及

2021-01-04 19:45:13 2469

原创 使用日志文件

在讲述使用日志之前,需要了解一些准备知识。首先,要知道应用程序有两个生成版本:Debug版本:该版本带有调试符合,在调试代码的时候应该选择该版本。由于生成了调试相关的信息,因此该版本的应用程序文件的体积较大,执行效率也较低。Release版本:发布版本,当调试完应用程序,确定无误后,就要发布应用程序以供用户使用。该版本生成少量的调试信息,或者不生成调试信息,因而文件体积较小,执行的效率也较高。在项目"属性"-"生成"选项卡里有"定义DEBUG常量"和"定义TRACE常量"两个选项。选中某个选项意

2021-01-04 17:47:05 224

原创 断言(Assert)

由于翻译的影响,“断言”在字面意思上不太好理解,直接使用原单词assert可能会更好。Debug类的Assert方法有一些不同的重载,不管是哪个版本的重载,都有一个condition参数,bool类型。Assert方法的功能是:当condition参数为false时候显示错误提示。在了解了Assert方法的功能后,就可以联想到,断言的作用是检验代码的执行是否符合预期的结果。如果不符合(condition参数为false),就表明断言失败,在输出窗口中显示错误提示。示例如下: stati

2021-01-03 18:13:04 3060

原创 输出信息法(Debug)

有时候,开发者并不关心对象在运行时的状态,而仅仅需要验证结果是否正确,因此通过输出调试信息来判断代码的执行结果是否符合预期,比起断点调试会更方便。Debug类(位于System.Diagnostics命名空间下)可以帮助开发人员完成与调试相关操作,比如输出调试信息、断言等。而用于输出调试信息的方法有以下几个:Print方法:输出文本信息,该文本信息是带有行结尾符的,也就是说每次输出一行。Write方法:输出调试信息,如果传递给参数的不是字符串类型,则调用该对象的ToString方法以获取字符串表示形

2021-01-03 02:23:54 516

原创 在数组中查找元素

在数组中查找元素1. 查找元素的索引数组操作基本上都是由Array类来负责,因而该类也提供了一系列方法来用于在数组中进行查找。这些方法按照查找结果划分,大体可以分为两类,下面将分别介绍。1. 查找元素的索引此种查找方式将返回被查找到的元素的索引,如果未找到,就返回-1。有两种方法可用:第一组是按照单个元素值来查找;第二组方法则比较灵活,可以通过System.Predicate委托来自定义查找过程。如下:第一组:IndexOf() —— 查找指定元素的索引,只要遇到符合条件的元素就停止查找。如

2021-01-02 21:28:43 18134

原创 嵌套数组

要注意多维数组和嵌套数组二者之间的区别,嵌套数组也叫数组的数组,或者交错数组。通过以下方式来声明变量:int[3][2] arr;就是数组中的每个元素也是数组,也就是数组里面也包含数组。如: //嵌套数组 char[][] ccs = new char[][] { new char[]{'a','b'}, new char[]{'c','d'},

2021-01-02 16:18:24 7971 3

原创 特性

默认情况下特性是应用于跟随其后的对象的,因此在许多时候,在使用特性时都会省略表示特性目标的关键字。以下是特性应用于目标对象时的完整格式。[<目标>:<特性列表>]特性目标关键字及相关说明:assembly —— 表示特性将应用于当前程序集,通常放在程序集中命名空间或所有类型定义之前。module —— 用于当前模块,该特性用得比较少。field —— 该特性用于字段,如果特性后紧跟着字段的声明代码,则该关键字可以省略。event —— 特性用于事件,默认情况下也可以省

2021-01-02 03:41:25 96

原创 网络通信

1. Socket通信在Windows.Networking.Sockets命名空间下提供了支持Socket通信相关的类型。有趣的是,这些类型的命名中并没有出现如TCP、UDP等关键词,官方似乎有意避开这些传统的命名方式,而是按照各通信协议的功能来命名。可参考如下:DatagramSocket ——用UDP协议的Socket网络通信StreamSocket —— 通过流方式接收/发送网络数据,实际上是基于TCP协议的Socket通信。在服务器端,可以使用StreamSocketListener来监听

2020-12-28 01:33:32 349

原创 文件与数据

@[TOC]1. 文件与目录#(1) 文件/目录操作的相关类型与文件/目录操作有关的类型主要分布在Windows.Storage命名空间及该命名空间下的子命名空间中。下面列出了与文件/目录操作有关的几个重要类型。StorageFile 表示一个文件类型,通过该类,可以对某个文件进行一些常用操作,例如重命名、删除、获取基本属性等StorageFolder 表示一个目录实例,可以对某个目录进行重命名、复制、删除等操作KnownFolders 一个静态类型,公开一系列静态属性,通过这些属性可以直接获取

2020-12-22 03:51:02 545

原创 激活远程系统上的应用

从build 14393版本开始,UWP应用将支持启动远程计算机系统上的应用。要启动远程系统上的应用,需要使用RemoteLauncher类,并通过URI来激活远程应用。在调用远程系统上的应用前,必须查找可用的远程系统。远程系统相关的信息由RemoteSystem类进行封装。发现远程系统可以有两种方法:第一种方法是直接调用FindByHostNameAsync方法,通过指定的远程计算机的名字来查找;第二种方法是调用CreateWatcher方法,创建一个RemoteSystemWatcher实例,最终由

2020-12-22 03:28:55 258

原创 协议激活(uwp)

为应用程序注册协议后,可以通过URI来激活当前应用程序,并且还可以在激活应用程序的URI中附加上参数,应用程序在完成激活操作的过程中可以根据URI传递的参数来做出相应的处理。协议URI是以协议名称开头,后面紧跟一个英文冒号。冒号后面的内容可以根据实际情况来定义,是可选的。假设某个应用程序注册了名为"topic"的协议,那么要激活该应用程序的话,可以使用Launcher类的LaunchUriAsync方法启动,传入方法参数的URI为:topic:带参数的URI可以这样写:topic:12345冒

2020-12-20 18:09:25 397 1

原创 自定义文件关联(uwp)

声明文件类型关联,即可以将当前应用程序加入到已有文件类型的"打开方式"列表中,也可以为应用程序声明新的文件类型,当用户单击打开文件时,系统会启动当前应用程序,因此,开发者需要对应用程序的激活事件进行处理。当通过某个文件激活时,通常的处理方案是显示该文件的内容。下面通过示例来演示如何将应用程序与自定义类型的文件关联。本示例需要三个应用程序页面:MainPage为主页,用于输入文件的内容,然后将输入的内容保存到文件;FilesPage页面用来显示已经保存的文件列表,当用户单击文件后,会使用当前应用程序来打开

2020-12-20 01:45:43 380

原创 转码

Windows.Media.Transcoding命名空间下提供了相关API,支持对音/视频文件进行转码处理。这些API已经由官方封装好,使用起来比较方便。通俗一点说,多媒体文件转码就是将音/视频文件从一种格式转换为另一种格式,如将AVI格式的视频转换为MP4格式的视频。实现多媒体转码的一般步骤如下:(1). 实例化MediaTranscoder对象。(2). 调用PrepareXXXTranscoderAsync方法,异步等待执行后会得到一个PrepareTranscodeResult对象实例

2020-12-17 17:15:27 694

原创 人脸检测(图像处理)

FaceDetector类支持从指定的位图中检测出人脸所在的区域,检测结果用DetectedFace对象表示。人脸检测结果可以从DetectedFace类公开的FaceBox属性中获取,包含人脸区域相对于位图的位置,例如X和Y坐标,以及宽度和高度。FaceDetector公开一些静态成员,用以在使用FaceDetector之前进行相关的验证。如果当前设备不支持人脸检测,则IsSupported属性会返回false。如下代码片段所示: bool isSupport = Fa

2020-12-16 18:55:40 1144

原创 图像处理

这里所说的图像处理是指通过修改图像的像素数据,从而改变图像的呈现效果。在实际开发中,比较常用的是为图像添加滤镜,如浮雕效果等。编辑像素数据实际上是对每个像素点中的各个颜色通道值进行修改以达到预期结果。通常像素点包含红色(R)、绿色(G)、蓝色(B)以及A(不透明度,即Alpha值)4个通道,A值一般不用修改,许多情况下都是对RGB三原色进行一些算法运行。图像处理的各种算法可以通过查阅资料,或者网络搜索直接获取。在编辑像素数据之前,读者应简单了解一下几种像素格式。BitmapPixelFormat枚举

2020-12-16 17:54:41 573

原创 图像的解码与编码

尽管使用BitmapImage等类型可以对图像文件进行解码,但是,如果图像文件包含多个帧(如Gif图像一般包含多个帧),或者需要对图像进行修改后并保存为新的文件,那么BitmapImage类是无法胜任的。因此在实际开发中,是需要用到图像的编码与解码技术的。1. 图像解码对图像文件进行解码需要使用BitmaDecoder类(位于Windows.Graphics.Imaging命名空间),该类包装了图像解码的一系列功能。下面将用示例来演示如何对Gif图像文件进行解码,并显示Gif文件中各个帧的图像。

2020-12-16 17:12:37 5897

原创 可写位图(WriteableBitmap)

WriteableBitmap派生自BitmapSource类,因此它属于内存位图,不过WriteableBitmap类公开了表示图像像素数据的PixelBuffer属性,可以通过该属性在运行时写入或修改像素数据,以达到编辑图像的效果。下面示例演示通过向WriteableBitmap对象写入像素数据的形式来动态创建内存图像。通过代码生成的内存图像将显示在Image控件中,Button控件的Tapped事件处理代码如下: private async void Button_Ta.

2020-12-14 02:01:47 2174 2

原创 将可视化对象呈现为图像

使用RenderTargetBitmap类,可以将用户界面上的某个可视化元素以及它的子元素呈现到内存图像中。只需简单调用RenderAsync方法就可以完成,在调用方法时传入的可视化对象类型要求为UIElement,也就是说,只要是从UIElement类派生的类型实例都可以在RenderTargetBitmap位图中呈现。接下来将通过示例来演示RenderTargetBitmap类的用法。示例的XAML代码如下: <ScrollViewer> <Grid

2020-12-14 01:39:41 222

原创 动画(uwp)

动画概要动画实质上是一系列静止的图像,随着时间的推移不断进行切换,由于人眼的视觉反应存在误差,使连续播放的静止画面看起来是运动的,而某段时间内所切换的每一个静态画面被称为"帧"。假设在1秒内播放了25个静态画面,就可以称作"25帧/秒"。1.时间线(Timeline)...

2020-12-10 18:11:24 614 1

原创 三维变换(PerspectiveTransform3D、CompositeTransform3D)

表示三维变换的公共基类是Transform3D,并派生出两个子类——PerspectiveTransform3D和CompositeTransform3D。通常PerspectiveTransform3D与CompositeTransform3D会搭配使用。PerspectiveTransform3D主要负责视角的调整,通过Depth属性设置观察点与可视化对象的距离(即与Z轴原点的距离,取值必须大于0),OffestX属性和OffestY属性用于设定观察点的位置,参照点为X轴和Y轴的原点。正是由于P

2020-12-10 15:14:48 679

原创 三维透视

使用PlaneProjection类能够实现在二维平面上产生类似于三维视觉的效果,主要是通过在X、Y、Z三个坐标轴上应用平移或者旋转变换来完成透视处理的。在运行PlaneProjection类之前,应当简单了解一下透视变换的坐标系结构。假设用户正对着设备屏幕,那么,屏幕上水平方向为X轴,向右延伸为正方向,向左则为负方向;屏幕竖直方向为Y轴,正方向朝上,负方向朝下;而Z轴是垂直于屏幕所在的平面,正方向指向用户自己,负方向指向屏幕背面。接下来,还要知道,在透视变换中有两个坐标控件——全局坐标和本地坐标。

2020-12-09 18:05:35 956

原创 二维变换

二维变换就是在不改变几何图形原有参数的前提下,对图形进行平移、旋转、缩放等操作。完成这些变换操作的类型都从Transform类派生。任何可视化对象都可以使用二维变换,如UIElement类公开的RenderTransform属性,Brush类和Geometry类的Transform属性,都可以设置关联的变换对象。因为所有的控件类型都是UIElement的子类,所以所有控件都可以应用二维变换。1. 平移(TranslateTransform)平移变换通过指定X轴和Y轴上的平移量来确定移动方向。Tran

2020-12-09 12:58:06 622 1

原创 Path(图形)

路径(Path类)也是从Shape类派生的,但路径可以创建复杂的几何图形。Path类公开Data属性,类型为Geometry(位于Windows.UI.Xaml.Media命名空间),它表示几何图形的基类,一般不直接使用该类。从Geometry派生的表示几何图形的类型大致可以划分为两种。单一图形:LineGeometry、RectangleGeometry、EllipseGeometry 复合图形:PathGeometry、GeometryGroupLineGeometryLineGeome

2020-12-07 15:13:56 572

原创 折线(Polyline)、多边形(Polygon)

PolylinePlayline所绘制的图形由多个线段组成,因此它公开Points属性,它表示一系列坐标点的集合。这些点将用于描述Polyline图形中各线段相接处的顶点(包括起点和终点)。Points集合在XAML中可以直接用字符串写上多个点,书写方法有两种:每个坐标点之间使用至少一个空格开分隔,横坐标和纵坐标用英文的逗号分隔。 一个坐标点的横坐标与纵坐标用一个空格来分隔,这时候点与点之间就不能用单个空格来分隔了,因为这样书写会很混乱,编译器无法识别,因此点与点之间至少要用两个空格来分隔。示

2020-12-07 14:46:01 8830 1

原创 基本图形:直线(Line)

能够直接在XAML中使用的图形对象都派生自Shape类,此处的"基本图形"是相对于路径对象(Path类)而言的,路径可以绘制出比较复杂的图形,而其他图形类一般用于构建相对简单且独立的几何图形,如矩形、椭圆(包括正圆)、直线、多边形等。线条是最简单的几何图形,通过两个坐标点就可以确定一个Line对象,即线条的起点与终点。在Line类中,X1属性表示起点的横坐标,Y1属性表示起点的纵坐标;X2属性表示终点的横坐标,Y2表示终点的纵坐标。由于Line对象仅仅是一段单独的线条,它不存在内部区域,因此Line

2020-12-06 23:08:40 1746

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除