代码人生的小狗窝

一行行枯燥的代码,却描绘出人生的点点滴滴

推荐文章

UWP: 体会应用内购新接口——StoreContext类

    UWP: 体验应用内购新接口——StoreContext类Windows 1607 版本(内部版本 14393)之后,微软在 SDK 添加了一些与应用商店相关的新接口,像应用试用与购买、应用内购等。这些接口相对于原来的接口要方便很多。就拿应用内购来说,以前的方式是:开发时,为了方便测试,在项目中添加一个 xml 文件,此文件描述了应用内的产品信息,然后使用 CurrentAppSimulator 来完成相关的操作;当应用要发布到商店时,再将所有的 CurrentAppSimulator 替换成 CurrentApp;而使用新接口,则可以直接在开发环境中,就可以访问我们在开发人员中心(dev.windows.com/dashboard)中添加的产品,这样就和实际的购买操作完全一样,所以新接口更方便,更直观。 新接口的信息如下: 命名空间:Windows.Services.Store 类:S

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1324

2018-08-11

[UWP]依赖属性二:使用依赖属性

    [UWP]依赖属性2:使用依赖属性5. 完整的自定义依赖属性 5.1 定义 /// <summary> /// 标识 Title 依赖属性。 /// </summary> public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(MyPage), new PropertyMetadata(string.Empty)); /// <summary> /// 获取或设置Content的值 /// </summary> public object Content { get { return (object)GetValue(Co

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(2228

2018-08-10

[UWP]用Shape干动画(2):使用与扩展PointAnimation

    [UWP]用Shape做动画(2):使用与扩展PointAnimation上一篇几乎都在说DoubleAnimation的应用,这篇说说PointAnimation。 1. 使用PointAnimation 使用PointAnimation可以让Shape变形,但实际上没看到多少人会这么用,毕竟WPF做的软件多数不需要这么花俏。 1.1 在XAML上使用PointAnimation <Storyboard x:Name="Storyboard2" RepeatBehavior="Forever" AutoReverse="True" Duration="0:0:4"> <PointAnimation Storybo

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(929

2018-08-11

Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性有关问题

    Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题最近在开发一个项目时,遇到了一个奇怪的问题,项目依赖的最低版本是10586,目标版本是14393,开发完毕发布到商店后,很多用户报无法正常加载页面。经查,有问题的都是Win10 10586版本。   我上篇博客中写到的自定义的AppBar控件,也存在这个问题,10586会报错。   为此特意下载了10586的SDK调试。错误显示,一个样式找不到,名为ListViewItemBackground。因为开发的时候是基于14393的,有可能是14393的SDK中默认有该样式,但10586没有。   首先找到以下目录: C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP 可以看

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1315

2018-08-10

[UWP]理解模板化控件(1):基础知识

    [UWP]了解模板化控件(1):基础知识1.概述 UWP允许开发者通过两种方式创建自定义的控件:UserControl和TemplatedControl(模板化控件)。这个主题主要讲述如何创建和理解模板化控件,目标是能理解模板化控件常见的知识点,并且可以创建扩展性良好的模板化控件。 1.1 ControlTemplate UWP的控件有很多属性,使用这些属性可以为控件定制不同的外观,例如将Button的Border变粗,Background改为红色等,但通过这种改造控件,能做到的仍十分有限。 通过为控件赋予新的ControlTemplate,可以为控件创建全新的外观。在下面的例子中,通过ControlTemplate将Button改成一个圆形按钮。 <Button Content="Orginal" Margin="0,0,20,0"/>

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1850

2018-08-14

[UWP]懂得模板化控件(9):UI指南

    [UWP]了解模板化控件(9):UI指南1. 使用TemplateSettings统一外观 TemplateSettings提供一组只读属性,用于在新建ControlTemplate时使用这些约定的属性。 譬如,修改HeaderedContentControl的ControlTemplate以呈现不同的外观,但各个ControlTemplate之间的HeaderedContentControl中的Margin和FontWeight想要保持统一。为了实现这个目的可以创建一个提供默认Margin和FontWeight值的HeaderedContentControlTemplateSettings类。实现如下: HeaderedContentControlTemplateSettings.cs public class HeaderedContentControlTemplateSettings

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(930

2018-08-12

[UWP]不如何实用的Shape指南:自定义Shape

    [UWP]不怎么实用的Shape指南:自定义Shape1. 前言 这篇文章介绍了继承并自定义Shape的方法,不过,恐怕,事实上,100个xaml的程序员99个都不会用到。写出来是因为反正都学了,当作写个笔记。 通过这篇文章,你可以学到如下知识点: 自定义Shape。 DeferRefresh模式。 InvalidateArrange的应用。 2. 从Path派生 UWP中的Shape大部分都是密封类--除了Path。所以要自定义Shape只能从Path派生。Template10给出了这个例子:RingSegment 。 从这个类中可以看到,自定义Shape只需要简单地在每个自定义属性的属性值改变时或SizeChanged时调用private void UpdatePath()为Path.Data赋值就完成了,很简单吧。 RingSegment.StartAngle = 30; Ri

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1891

2018-08-14

[UWP]懂得模板化控件(3):实现HeaderedContentControl

    [UWP]了解模板化控件(3):实现HeaderedContentControl1. 概述 来看看这段XMAL: <StackPanel Width="300"> <TextBox Header="TextBox" /> <ComboBox Header="ComboBox" HorizontalAlignment="Stretch"/> <AutoSuggestBox Header="AutoSuggestBox" /> <TextBlock Text="ListBox" /> <ListBox> <ListBoxItem Content

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1576

2018-08-14

[UWP]懂得模板化控件(5):VisualState

    [UWP]了解模板化控件(5):VisualState1. 功能需求 使用TemplatePart实现上篇文章的两个需求(Header为空时隐藏HeaderContentPresenter,鼠标没有放在控件上时HeaderContentPresent半透明),虽然功能已经实现,但这样实现的话基本上也就别想扩展了。譬如开发者做不到通过继承或修改ControlTemplate实现如下功能: 半透明时的Opacity不是0.7,而是0.5。 半透明和不透明之前切换时有渐变动画。 当然也并不是不可以用代码实现这些需求,只是会复杂很多。大部分的开发者都是对C#熟悉,对XAML陌生,很容易就选择尽量使用C#实现全部功能,将所有功能集中在同一个地方并用熟悉的语言处理,当然也有这样做的优点,不过既然在用XAML平台,就应该尽可能利用XAML平台UI和代码分离的优点。 这篇文章用ContentView2

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1662

2018-08-14

[UWP]理解模板化控件(4):TemplatePart

    [UWP]了解模板化控件(4):TemplatePart1. TemplatePart TemplatePart(部件)是指ControlTemplate中的命名元素。控件逻辑预期这些部分存在于ControlTemplate中,并且使用protected DependencyObject GetTemplateChild(String childName)获取它们后进行操作。 以AutoSuggestBox为例,它的ControlTemplate结构如下,可以看到AutoSuggestBox由四个TemplatePart组成,每个TemplatePart都可以在控件代码中以编程方式访问: 下图显示了AutoSuggestBox的TemplatePart: 2. 使用TemplatePart 上一篇文章构造了一个很基础的控件HeaderedContentControl,这次通过扩展这个类

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(2026

2018-08-12

[UWP]懂得模板化控件(6):使用附加属性

    [UWP]了解模板化控件(6):使用附加属性1. 基本需求 之前的ContentView2添加了PointerOver等效果,和TextBox等本来就有Header的控件放在一起反而变得鹤立鸡群。 为了解决这个问题,这次把ContentView2的Header部分分离出来做成一个可复用的控件HeaderView,它继承自Control,并且拥有Header属性及AttachElement属性。把它放到其他控件的ControlTemplate替换原本的HeaderContentPresenter,这样就能统一外观了。在ControlTemplate中它的使用方式如下: <local:HeaderView AttachedElement="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}}"

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(686

2018-08-13

[UWP]外加属性2:实现一个Canvas

    [UWP]附加属性2:实现一个Canvas5. 附加属性实践:自定义Canvas 附加属性在UWP中是一个十分重要的组成部分,很多功能都依赖于附加属性实现,典型的例子是常用的Grid和Canvas。通常附加属性有三个使用场景:插入属性、触发行为、当做缓存。可以参考以下提供的MyCanvas示例理解这三点。 5.1 插入属性 这里实现的MyCanvas继承自Panel,是一个十分简单的类(作为示例并没有十分严格的验证等代码,所以只有几十行代码),它实现了和Canvas类似的布局并且提供了Left和Right两个附加属性。使用方式如下: <local:MyCanvas> <Rectangle local:MyCanvas.Left="50" local:MyCanvas.Top="50"

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(1035

2018-08-14

[UWP]理解模板化控件(2):模仿ContentControl

    [UWP]了解模板化控件(2):模仿ContentControlContentControl是最简单的TemplatedControl,而且它在UWP出场频率很高。ContentControl和Panel是VisualTree的基础,可以说几乎所有VisualTree上的UI元素的父节点中总有一个ContentControl或Panel。 因为ContentControl很简单,如果只实现ContentControl最基本功能的话很适合用来做TemplatedControl的入门。这次的内容就是模仿ContentControl实现一个模板化控件MyContentControl,直接继承自Control。 1. 定义属性 /// <summary> /// 获取或设置Content的值 /// </summary> public object Content {

    阅读全文>>

作者:coody分类:【_WinRT Metro浏览(594

2018-08-11
上一页 1/10页 下一页