必赢亚洲手机app下载


作者的读书书单2366net必赢亚洲手机版

必赢亚洲手机app本身眼中的英伦

366net必赢亚洲手机版Property的简要利用

366net必赢亚洲手机版,  UWP中的Attached Property即附加属性,在其实支付中是很广阔的,比如Grid.Row:

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Button Grid.Row="1"></Button>
    </Grid>

   Grid.Row那本脾气并不是Button对象自小编的实例方法,而是定义在Grid类型上的static
property,实际应用时却又附在别的控件的XAML里。

  大家后天不研究什么选拔UWP中一度定义好的Attached Property(使用起来很简单,没啥好讲的),也不会介绍附件属性的概念,以及与.NET属性的界别(MSDN文书档案非常详细),更不会花大气力去分析附加属性背后的法则(这一个有大腕珠玉在前,不敢造次)。

  本篇仅以极不难的例子来呈现Attached Propery的使用场景,引玉之砖以期共同学习进步。

  设想场景如下,供给基于文件内容,将电话号码和邮箱地址以下划线梅红字体和普通文本区分开来:

  366net必赢亚洲手机版 1

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock local:RichTextBlockEx.RichText="种子我发你这个邮箱:SampleEmail@outlook.com,有事打我电话18610241024。"></TextBlock>
    </Grid>

  彰显文本UWP中貌似是由此TextBlock来兑现,一段文字中一旦必要分化颜色,以及增添下划线就要求在TextBlock的Inlines属性中添加区别的Inline的子类对象(比如Run,Underline等)。

  而修改TextBlock的Inlines集合须要一直操作TextBlock对象,UWP的先后又普通是MVVM结构,在ViewModel中不应添加对View层级的引用,那就必要不可能在ViewModel中访问TextBlock。

  那么修改TextBlock的逻辑就只好放在View中,难题是最后回到的TextBlock须要基于运维时具体绑定的文件内容才能显著,需求同时能访问TextBlock以及绑定的DataContext。就如也不合乎写在Page.xaml.cs中。

  Attached Propery则尤其周全的缓解了作者们的难题,首先附加属性扶助binding,那就将View中的TextBlock和ViewModel中的文本内容结合在一起;其次附加属性是View层级的定义,通过它来修改TextBlock不会损坏MVVM的构造。

  接下去大家起始定义一个Attached
Property:

        public static string GetRichText(DependencyObject obj)
        {
            return (string)obj.GetValue(RichTextProperty);
        }

        public static void SetRichText(DependencyObject obj, string value)
        {
            obj.SetValue(RichTextProperty, value);
        }

        // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty RichTextProperty =
            DependencyProperty.RegisterAttached("RichText", typeof(string), typeof(RichTextBlockEx), new PropertyMetadata(null, RichTextChanged));

  那些附加属性叫做RichTextProperty,大家给他做了GetRichText和SetRichText七个办法的卷入,以便我们能像经典的.NET属性一样,通过“RichText”来走访。具体的细节请参见MSDN的文档,那里我们第二看一下RegisterAttached方法中传递了二个回调方法RichTextChanged。

        private static void RichTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TextBlock textBlock = d as TextBlock;
            if (textBlock == null)
                return;
            string inputString = e.NewValue as string;
            if (string.IsNullOrEmpty(inputString) || string.IsNullOrWhiteSpace(inputString))
            {
                textBlock.Text = string.Empty;
                return;
            }
            textBlock.Inlines.Clear();
            CreateTextBlock(textBlock, inputString);
        }

  该格局是3个静态方法,在biding的靶子产生改变时接触,并将biding的对象自小编作为第②个参数字传送递进来。该措施的代码先判断了绑定的新值是或不是为空,不为空则调用CreateTextBlock方法,依照inputString来创立带有深黑下划线的TextBlock。

        private static void CreateTextBlock(TextBlock textBlock, string inputString)
        {
            var resultList = new List<MatchResult>();
            resultList.AddRange(GetMatchResultList(inputString));

            int offset = 0;
            var matchDicOrder = resultList.OrderBy(_ => _.Match.Index);
            foreach (var item in matchDicOrder)
            {
                var match = item.Match;
                if (match.Index >= offset)
                {
                    if (match.Index > 0 && match.Index != offset)
                    {
                        var text = inputString.Substring(offset, match.Index - offset);
                        AddText(textBlock, text);
                    }

                    var content = inputString.Substring(match.Index, match.Length);
                    AddUnderline(textBlock,  content);
                    offset = match.Index + match.Length;
                }
            }

            if (offset < inputString.Length)
            {
                var text = inputString.Substring(offset);
                AddText(textBlock, text);
            }
        }

  通过正则表明式匹配phone和email,将分外的内容通过AddUnderline方法添加到原TextBlock中,不包容的剧情则平昔AddText。

        private static void AddText(TextBlock textBlock, string text)
        {
            Run run = new Run();
            run.Text = text;
            textBlock.Inlines.Add(run);
        }

        private static void AddUnderline(TextBlock textBlock, string content)
        {
            Run run = new Run();
            run.Text = content;
            run.Foreground = new SolidColorBrush(Colors.Blue);
            Underline underline = new Underline();
            underline.Inlines.Add(run);

            textBlock.Inlines.Add(underline);
        }

  实际的支出中,那里也许存在更复杂的逻辑,比如即时通信程序中存在@的概念,下划线的剧情必要在点击后做相应处理等(打电话,发邮件)。本篇中的代码为了简单清晰做了最简化的拍卖,各位在协调的APP里能够进一步公布想象补充,只要别让手提式有线电话机或电脑爆炸就行……

  本篇有心回归开发入门的初心,介绍的始末较为简单,写得不好还请见谅。

  照例放出GayHub地址:

  https://github.com/manupstairs/UWPSamples

 

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图