路上看到不少昊天宗子弟,一律都是灰衣装束,唐龙兄弟带着唐三来到二楼最内侧的一座拱门前停了下来。

只见小姑娘忽然从自己的裙底,摸出一把白色的迷你手枪来,然后指着萧童站了起来:“我笑你杀人的时候,还这么多废话!”

网赚团队微信

明老二不愧是在黑道上混过的,他知道自己这一次是活不了了,干脆死就死的壮烈点。头一别,说道:“要杀要剐,悉听尊便”。
很显然,丁宁的存在,就在赤果果告诉所有人,鸡汤都是熬出来的,说谎的都是骗子,相信的全是傻子。

作为一个如此强大的世界的天道,他有多强不需要多说了,而伏羲弄到了天道的一部分形成的天道碎片威能之大难以想象,再加上落在伏羲手里配合伏羲刀以伏羲那惊天地泣鬼神的修为施展出来当真是震烁古今。

New UWP Community Toolkit - DeveloperTools


概述

UWP Community Toolkit  中有一个开发者工具集 DeveloperTools,可以帮助开发者在开发过程中进行 UI 和功能的调试,本篇我们结合代码详细讲解  DeveloperTools 的实现。

DeveloperTools 中目前包括了两个工具:

  • AlignmentGrid - 提供了 Grid 中的网格,开发者可以根据网格来检查控件对齐;除了开发过程中的辅助作用,开发者还可以使用它作为画板辅助线,日记应用的网格等 UI 显示;
  • FocusTracker - 可以显示当前聚焦的 XAML 元素信息,包括 name,type,AutomationProperties.Name 和 first parent name;

来看一下官方示例中的截图:

 

Source: https://github.com/Microsoft/UWPCommunityToolkit/tree/master/Microsoft.Toolkit.Uwp.DeveloperTools

Doc: https://docs.microsoft.com/zh-cn/windows/uwpcommunitytoolkit/developer-tools/alignmentgrid

        https://docs.microsoft.com/zh-cn/windows/uwpcommunitytoolkit/developer-tools/focustracker

Namespace: Microsoft.Toolkit.Uwp.DeveloperTools;   Nuget: Microsoft.Toolkit.Uwp.DeveloperTools;

 

开发过程

代码分析

1. AlignmentGrid

AlignmentGrid 类继承自 ContentControl,定义的依赖属性如下:

  • LineBrush - 网格线的颜色画刷
  • HorizontalStep - 网格横向的步长,默认为 20.0
  • VerticalStep - 网格纵向的步长,默认为 20.0,横向和纵向步长可以不相等

以上三个属性变化时,会触发 OnPropertyChanged(d, e),和 AlignmentGrid_SizeChanged(s, e) 一样,主要处理逻辑在 Rebuild() 方法中,下面我们看看 Rebuild() 方法实现:

  • 清空 containerCanvas,获取当前横向和纵向步长,如果 lineBrush 无效,则初始化为 ApplicationForegroundThemeBrush;
  • 横向循环绘制矩形,循环步长是横向步长,总长度是控件实际宽度;绘制矩形宽度为 1,高度为控件实际高度,位置居左为当前总步长;
  • 纵向循环绘制矩形,循环步长是纵向步长,总长度是控件实际高度;绘制矩形高度为 1,宽度为控件实际宽度,位置居上为当前总步长;
private void Rebuild()
{
    containerCanvas.Children.Clear();
    var horizontalStep = HorizontalStep;
    var verticalStep = VerticalStep;
    var brush = LineBrush ?? (Brush)Application.Current.Resources["ApplicationForegroundThemeBrush"];

    for (double x = 0; x < ActualWidth; x += horizontalStep)
    {
        var line = new Rectangle
        {
            Width = 1,
            Height = ActualHeight,
            Fill = brush
        };
        Canvas.SetLeft(line, x);

        containerCanvas.Children.Add(line);
    }

    for (double y = 0; y < ActualHeight; y += verticalStep)
    {
        var line = new Rectangle
        {
            Width = ActualWidth,
            Height = 1,
            Fill = brush
        };
        Canvas.SetTop(line, y);

        containerCanvas.Children.Add(line);
    }
}

2. FocusTracker 

FocusTracker 包含了两个文件:

  • FocusTracker.xaml - FocusTracker 的样式文件,主要定义了 FocusTracker 的显示信息,如上面控件介绍中所说的;
  • FocusTracker.cs - 定义处理文件, 定义了 FocusTracker 的主要处理逻辑;

FocusTracker.cs

FocusTracker 类中定义了一个依赖属性 IsActive,属性变化时会触发 OnIsActiveChanged(d, e) 处理方法,IsActive == true 时,调用 Start() 方法;IsActive == false 时,调用 Stop() 方法;

我们看到,类中的主要处理是定义一个 DispatcherTimer,在 Start() 方法中实例化并启用它,Stop() 方法中停止它,并清空内容显示;

private void Start()
{
    if (updateTimer == null)
    {
        updateTimer = new DispatcherTimer();
        updateTimer.Tick += UpdateTimer_Tick;
    }

    updateTimer.Start();
}

private void Stop()
{
    updateTimer?.Stop();
    ClearContent();
}

来看一下 updateTimer 的 Tick 处理方法:

  • 使用 FocusManager 获取当前获得焦点的元素,清空上一次获取焦点的控件内容信息;
  • 分别获取 Name、Type、AutomationProperties.Name 和 First Parent 信息,这对于代码调试和自动化测试很有帮助;
private void UpdateTimer_Tick(object sender, object e)
{
    var focusedControl = FocusManager.GetFocusedElement() as FrameworkElement;

    if (focusedControl == null)
    {
        ClearContent();
        return;
    }

    if (controlName != null)
    {
        controlName.Text = focusedControl.Name;
    }

    if (controlType != null)
    {
        controlType.Text = focusedControl.GetType().Name;
    }

    if (controlAutomationName != null)
    {
        controlAutomationName.Text = AutomationProperties.GetName(focusedControl);
    }

    if (controlFirstParentWithName != null)
    {
        var parentWithName = FindVisualAscendantWithName(focusedControl);
        controlFirstParentWithName.Text = parentWithName?.Name ?? string.Empty;
    }
}

 

调用示例

1. AlignmentGrid

我们在 Grid 中放了一个 AlignmentGrid 控件,还有一个 TextBlock,做对比显示,效果如下图;

引申一下,我们可以修改 AlignmentGrid 绘制矩形的代码,AlignmentGrid 中定义了 AlignmentGrid 作为矩形的边框画刷,我们可以根据矩形的位置,绘制出左边到右边渐变的画刷,或者虚线的画刷;或者跨度更大一些,使用 ImageBrush 来作为父控件的九宫格显示等,相信大家会有更丰富的想象和应用场景;

<Grid>
    <tools:AlignmentGrid LineBrush="Gray" HorizontalStep="40" VerticalStep="30" Opacity="1.0"/>
    <TextBlock Text="Hello World" FontSize="40" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>

2. FocusTracker

我们使用 FocusTracker 来跟踪对 TextBox 的聚焦事件,XAML 中设置的属性和下面运行显示中的信息一致;

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <tools:FocusTracker IsActive="True" VerticalAlignment="Center" HorizontalAlignment="Center"/>
    <TextBox x:Name="testTB" Text="textblock for test" AutomationProperties.Name="textblock" 
                HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,50,0,0"/>
</Grid>

 

总结

到这里我们就把 UWP Community Toolkit 中的 DeveloperTools 的实现过程和简单的调用示例讲解完成了,希望这些工具对大家开发 UWP 应用有所帮助,如果大家有更好用的工具类,也欢迎大家给 UWPCommunityToolkit 做 PR,贡献自己的代码,欢迎大家多多交流,谢谢!

最后,再跟大家安利一下 UWPCommunityToolkit 的官方微博:https://weibo.com/u/6506046490, 大家可以通过微博关注最新动态。

衷心感谢 UWPCommunityToolkit 的作者们杰出的工作,Thank you so much, UWPCommunityToolkit authors!!!

 

当前文章:http://hnhdqp.com/content/2018-10/09/content_58409.html

发布时间:2018-12-13 11:08:10

现在能赚钱的手机app 写网络小说怎么赚钱 快速赚钱方法 免费网络赚钱 ktv多少钱一小时 看广告赚钱软件排行 手机打码挂机赚钱平台 赚米拉可以提现吗

编辑:公成道

相关新闻

衡愈堂中医养生连锁签约CloudCC CRM

2018-12-13 00:53:37

铜川豆蒂投资有限公司

米脂县举办新任科级干部暨组工干部培训班

2018-12-13 11:02:00

瓦房店创史集团

2015中国国际旅交会圆满落幕 旅游交易展示与旅游外交比翼双飞

2018-12-13 08:19:47

哈尔滨彻成文化传媒有限公司

《最佳前男友》受追捧 言承旭幼稚总裁戳萌点

2018-12-13 01:14:52

乌兰察布囟涨电子科技有限公司

热门推荐

  • 【最美基层干部】王传喜:谋乡村振兴 让村民富而乐
  • 《合金装备:幸存》上架Steam:220元、最低GTX 650
  • “国考”启动补录 空缺职位为近三年最大规模
  • 899元!腾讯智能手表Pacewear HC发布:支持微信与QQ一键支付
  • 《双星之阴阳师》漫画第50话先行图 罪孽恶战一触即发
  • 西藏林芝发生6.9级地震 暂未接到有人员伤亡报告
  • 低龄留学需提前数年准备 发展兴趣特长可加分
  • 换装大尺寸中控屏 全新Ram 1500内饰谍照
  • 任天堂制作人:还有很多IP未登陆Switch 两年内大作不断
  • 【更新】谷歌更新Gboard安卓beta版:终于支持中文输入
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:女人拼命挣钱的意义 免费赚q币手机软件
  • 怎么日赚千元 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 农村干什么比较挣钱 威客兼职写手 挂机日赚2-3千 哪款app玩游戏可以赚钱