• WinRT Toolkit 介绍--Control篇



    WinRT toolkit是组针对Windows Runtime XAML开发的一系列Control,extension和helper类。它和Windows Phone Toolkit一样,也是由很多开源项目组合成的。这个项目里面最棒的感觉上有:

    1. Control里面的Chart,CaneraCaptureControl
    2. Debug Tool里面的VisualTreeDebuger:可以直接显示当前页面VisualTree,还可以直接修改控件的属性,就像在浏览器直接改CSS一样

    另外,7月初更新了一个关于WinRT Toolkit的视频,可以看出,这个项目还是有微软内部的员工主导的。今天先看看控件,下一次深入看看Debug Tool。

    需要二次开始,在详细看源码吧 :)

    Controls

    WinRT ToolKit的确定义很多WinRT 里面常用但是没有的控件,很多都是借鉴WPF和SL。由于很多控件都是照搬,所以不怎么符合Microsoft Design Language,也就是不怎么像metro风格。

    AlternativeFrame

    • Win8 和 WP 一样都是通过BackStack,CurrentJournalEntry 记录页面调用顺序。但是Win 8 和 SL一样有 ForwardStack,这个是WP没有的。
    • Win 8 里面可以有PreLoad的page ,这个在应用的一些关键路径可以用得上,而且必须是需要加载大量的资源的时候才会用得上吧。

    AnimatingContainer

    • 这里主要是用到了 AnimatingContainer。可以做缩放和位移的动画,但不不知道为什么不设计成behavior,而是设计成一个Container。



      使用
      <controls:AnimatingContainer
          Margin="0,100,0,0"
          PulseScale="2.07" <!--缩放倍数-->
          RadiusX="5"       <!--X轴位移-->
          RadiusY="20"      <!--Y轴位移-->
          Duration="0:0:10"><!--持续时间-->
          <TextBlock
              Style="{StaticResource HeaderTextStyle}"
              Text="10s rotation" />
      </controls:AnimatingContainer>

    Caleendar

    • 就是一个选择日期的控件,Sweet UI里面也有这个。看了实现,从Model到UI,所有东西都自己从新定义,灵活性还是挺高的。
    • 日期的选择模式有 SingleDate , SingleRange ,MultipleRange
    • 控件很多元素Style都是DP,可以根据需要设置


      使用
       <controls:Calendar
          VerticalAlignment="Center"
          HorizontalAlignment="Center" />
      

    CameraCaptureControl

    • 一个支持拍照,录音,CameraBuffer显示的控件
    • 支持将拍照和录像async存储


      使用
        <controls:CameraCaptureControl
          x:Name="TestedControl"
          CameraFailed="OnTestedControlCameraFailed"
          ShowOnLoad="True" />
      
      存储图片
      // 作者做WinRT存储图片,视频的时候可能无法关闭File,所以要多试几次
      // 如果真的这么多次尝试都失败了,就真失败了。
      stream = await TryCatchRetry.RunWithDelayAsync<Exception, IRandomAccessStreamWithContentType>(
                  file.OpenReadAsync(),
                  TimeSpan.FromSeconds(0.5),
                  10,
                  true);
      

    CascadingImageControl

    • 这个控件将图片分块,然后图片小块慢慢无规则出现
    • 呵呵效果很特别,但是妈蛋什么地方会用这样的效果啊。。

    CascadingTextBlock

    • 不想说了。。。

    Chart

    • 实现了WPF一样的图表控件:饼图,折线图,条形图,散点图什么都有
    • 颜色,图表介绍文字都可以设置,基本上能满足大部分的需求了




      定义
      <charting:Chart
          x:Name="PieChart"
          Title="Pie Chart"
          Margin="70,0">
          <charting:Chart.Series>
              <Series:PieSeries
                  Title="Population"
                  ItemsSource="{Binding Items}"
                  IndependentValueBinding="{Binding Name}"
                  DependentValueBinding="{Binding Value}"
                  IsSelectionEnabled="True" />
          </charting:Chart.Series>
      </charting:Chart>
      
      数据绑定:
      ((BarSeries)this.BarChart.Series[0]).ItemsSource = items;
      

    CountdownControl

    • 一个倒数的控件,类似于电影开始前的那个,效果还不错,挺Metro


      定义:
      <controls:CountdownControl
              x:Name="myCountdownControl"/>
      
      使用:
      myCountdownControl.Visibility = Visibility.Visible;
      await myCountdownControl.StartCountdownAsync(3);
      myCountdownControl.Visibility = Visibility.Collapsed;
      

    CustomAppBar

    • 可以出现作任何地方的AppBar,页面底部,顶部,左右两边,甚至页面内都可以


      定义:
      <controls:CustomAppBar
          x:Name="BottomAppBar"
          IsOpen="True">
          <StackPanel
              Orientation="Horizontal">
              <Button
                  Style="{StaticResource PlayAppBarButtonStyle}"/>
              <CheckBox
                  x:Name="IsLightDismissEnabledCheckBox"
                  Content="IsLightDismissEnabled"
                  VerticalAlignment="Center"
                  Checked="OnIsLightDismissEnabledCheckBoxChecked"
                  Unchecked="OnIsLightDismissEnabledCheckBoxUnchecked"/>
          </StackPanel>
      </controls:CustomAppBar>            
      

    CustomGridSplitter

    • CustomGridSplitter的使用时,是作为一个控件而不是一个容器。


      定义:
      <Grid
          Grid.Column="2">
          <Grid.RowDefinitions>
              <RowDefinition />
              <RowDefinition
                  Height="22" />
              <RowDefinition />
          </Grid.RowDefinitions>
          <controls:CustomGridSplitter
              x:Name="cgs4"
              Grid.Row="1" />
      </Grid>
      

    Gauge

    • 还是挺漂亮的,就是没太多用处。


      定义:
      <controls:Gauge
          Minimum="0"
          Maximum="100"
          Height="{Binding Size}"
          Value="{Binding Value}"
          NeedleBrush="Transparent"
          ScaleTickBrush="Black"
          ScaleBrush="DarkSlateGray"
          TickBrush="Transparent"
          TrailBrush="DarkSeaGreen"
          ValueBrush="DarkSeaGreen"
          ValueStringFormat="N1"
          Unit="° Fahrenheit"
          UnitBrush="DarkGray" /> 
      

    ImageButton & ImageToggleButton

    • 没什么特别,和 WP Toolkit对应的控件差不多用途
    • 但是我不禁吐槽一句,这是安卓和ios按钮吧,所有状态都用图片表示!?反正我应该不会用这玩意。。

      <controls:ImageButton
          HorizontalAlignment="Center"
          NormalStateImageSource="/Assets/Images/RedButton_Idle.png"
          HoverStateImageSource="/Assets/Images/RedButton_Hover.png"
          PressedStateImageSource="/Assets/Images/RedButton_Pressed.png" />
      
      
      <controls:ImageToggleButton
          Grid.Column="1"
          Grid.Row="1"
          Stretch="Fill"
          Width="40"
          Height="35"
          NormalStateImageSource="/Assets/Images/RedButton_Idle.png"
          HoverStateImageSource="/Assets/Images/RedButton_Hover.png"
          PressedStateImageSource="/Assets/Images/RedButton_Pressed.png"
          DisabledStateImageSource="/Assets/Images/RedButton_Disabled.png"
          CheckedStateImageSource="/Assets/Images/GreenButton_Idle.png"
          CheckedHoverStateImageSource="/Assets/Images/GreenButton_Hover.png"
          CheckedPressedStateImageSource="/Assets/Images/GreenButton_Pressed.png"
          CheckedDisabledStateImageSource="/Assets/Images/GreenButton_Disabled.png"
          IsEnabled="{Binding IsChecked, ElementName=cbIsEnabled}" /> 
      

    InputDialog

    • 和WP差不多,都是基于Popup的控件



      XAML定义:
      <controls:InputDialog
          x:Name="ContentControlHostedDialog" />
      
      ContentControlHostedDialog.ShowAsync(
      "ContentControl-hosted InputDialog",
      "This dialog is defined as Content of a ContentControl",
      "OK");
      
      ====================================================
      
      C# 定义:
      var dialog = new InputDialog();
      var result = await dialog.ShowAsync("This is the title", "This is the content/message", "Option 1", "Option 2", "Option 3");
      var content =
          string.Format(
              "Text: {0}, Button: {1}",
              dialog.InputText ?? "",
              result ?? "");
      await new MessageDialog(content, "Result").ShowAsync();         
      

    LayoutTransformControl

    • LayoutTransformControlAnimatingContainer类似。前者用的时候Transform后者使用的时Animation。但是如果LayoutTransformControl像Sample里面,不断调用Transform,效果看起来就和Animation差不多,但是性能估计就不太好。



      定义:
      <controls:LayoutTransformControl
          x:Name="transformControl">
          <controls:LayoutTransformControl.Transform>
              <RotateTransform
                  x:Name="rotateTransform" />
          </controls:LayoutTransformControl.Transform>
          <TextBlock
              Style="{StaticResource SubheaderTextStyle}"
              Text="Hello LayoutTransformControl" />
      </controls:LayoutTransformControl>
      
      调用:
      private async void PlayAnimation()
      {
          double angle = 0;
      
          while (_isOn)
          {
              angle += 3;
              await Task.Delay(30);
              rotateTransform.Angle = angle;
          }
      }
      

    NumericUpDown

    • 一个数字选择控件,可以设置的属性如图,没什么好解释的。


      定义:
      <controls:NumericUpDown
          Margin="0,10,0,0"
          Grid.Column="2"
          Grid.Row="2"
          Width="200"
          Value="30"
          Minimum="-100"
          Maximum="100"
          IsReadOnly="True"
          SmallChange="0.1"
          LargeChange="10" />
      

    PieSlice / RingSlice

    • 功能和Silder是对应的,但是它们是圆形的而已
    • 不过PieSlice / RingSlice不能操作,因为它们是继承Path的,也没有写操作的事件,只能用于展示


      定义:
      <controls:RingSlice
          Fill="{StaticResource AccentBrush}"
          Stroke="{StaticResource ShapeForeground}"
          StrokeThickness="2"
          Grid.Column="1"
          Grid.Row="2"
          InnerRadius="{Binding Value, ElementName=InnerRadiusSlider}"
          Radius="{Binding Value, ElementName=RadiusSlider}"
          StartAngle="{Binding Value, ElementName=StartAngleSlider}"
          EndAngle="{Binding Value, ElementName=EndAngleSlider}" />
      


    未完待续

    TreeView


    UniformGrid


    WatermarkPasswordBox / WatermarkTextBox

    WebBrowser

    WrapPane

  • 相关阅读:
    tomcat快速部署脚本
    Centos7下搭建单节点Zookeeper
    request的基本使用用法
    Centos7 下配置jdk
    oracle备份脚本(以日期命名文件夹)
    Centos7 关闭防火墙
    Centos7 配置静态ip地址
    杀死占用8080端口的进程
    git clone的时候遇到“Please make sure you have the correct access rights and the repository exists”
    【笔记】关于多分类问题中的混淆矩阵,精准率
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3202965.html
Copyright © 2020-2023  润新知