背水一戰 Windows 10 (29) - 控制項(文本類): RichTextBlock, RichTextBlockOverflow, RichEditBox

来源:http://www.cnblogs.com/webabcd/archive/2016/08/22/5794280.html
-Advertisement-
Play Games

背水一戰 Windows 10 之 控制項(文本類): RichTextBlock, RichTextBlockOverflow, RichEditBox ...


[源碼下載]


背水一戰 Windows 10 (29) - 控制項(文本類): RichTextBlock, RichTextBlockOverflow, RichEditBox



作者:webabcd


介紹
背水一戰 Windows 10 之 控制項(文本類)

  • RichTextBlock
  • RichTextBlockOverflow
  • RichEditBox



示例
1、RichTextBlock 的示例
Controls/TextControl/RichTextBlockDemo.xaml

<Page
    x:Class="Windows10.Controls.TextControl.RichTextBlockDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.TextControl"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent" >
        <StackPanel Margin="10 0 10 10">

            <!--
                RichTextBlock - 用於顯示富文本的控制項
                    Blocks - 富文本的內容
                        Paragraph - 每一個 Paragraph 代表一段內容,其繼承自 Block
                            Inlines - 每個 Paragraph 下都有一個內聯元素集合,其用法與 TextBlock 的 Inlines 基本相同(可以把 Paragraph 當做 Inlines 來使用)
                            InlineUIContainer - 用於放置任意 UI 元素
                            TextIndent - 指定此段文本的首行的縮進量
                    OverflowContentTarget - 當此 RichTextBlock 中的內容溢出時,將溢出文字輸出到指定的 RichTextBlockOverflow 中(此知識點的演示參見:RichTextBlockOverflowDemo.xaml)
                    HasOverflowContent - 是否有溢出內容可顯示(只讀)
            
                註:其他屬性、方法和事件與 TextBlock 基本相同,相關演示請參見 TextBlockDemo1.xaml 和 TextBlockDemo2.xaml
            -->

            <!--如果需要處理 Tapped, PointerPressed 之類的事件,簡單的方式就是把 IsTextSelectionEnabled 設置為 false-->
            <RichTextBlock Name="richTextBlock" HorizontalAlignment="Left" Margin="5" IsTextSelectionEnabled="False" Tapped="richTextBlock_Tapped">
                <RichTextBlock.Blocks>
                    <Paragraph TextIndent="0">
                        Windows 10 是美國微軟公司所研發的新一代跨平臺及設備應用的操作系統。
                    </Paragraph>
                    <Paragraph TextIndent="10">
                        Windows 10是微軟發佈的最後一個獨立Windows版本,下一代Windows將作為更新形式出現。Windows10共有7個發行版本,分別面向不同用戶和設備。
                    </Paragraph>
                    <Paragraph TextIndent="20">
                        在正式版本發佈一年內,所有符合條件的Windows7、Windows 8.1的用戶都將可以免費升級到Windows 10,Windows Phone 8.1則可以免費升級到Windows 10 Mobile版。所有升級到Windows 10的設備,微軟都將在該設備生命周期內提供支持(所有windows設備生命周期被微軟單方面設定為2-4年)。
                    </Paragraph>
                    <Paragraph TextIndent="30">
                        2015年7月29日起,微軟向所有的Windows 7、Windows 8.1用戶通過Windows Update免費推送Windows 10,用戶亦可以使用微軟提供的系統部署工具進行升級。
                    </Paragraph>
                    <Paragraph TextIndent="40">
                        2015年11月12日,Windows 10的首個重大更新TH2(版本1511,10.0.10586)正式推送,所有Windows10用戶均可升級至此版本。
                    </Paragraph>
                    <Paragraph>
                        <LineBreak />
                        <Span>可以把 Paragraph 當做 Inlines 來使用</Span>
                        <LineBreak />
                        <LineBreak />
                        <InlineUIContainer>
                            <StackPanel HorizontalAlignment="Left">
                                <TextBlock Text="下麵演示如何顯示一張圖片" />
                                <Image Source="/Assets/StoreLogo.png" Width="100" Height="100" />
                            </StackPanel>
                        </InlineUIContainer>
                    </Paragraph>
                </RichTextBlock.Blocks>
            </RichTextBlock>

            <TextBlock Name="textBlock" Margin="5" />

        </StackPanel>
    </Grid>
</Page>

Controls/TextControl/RichTextBlockDemo.xaml.cs

/*
 * RichTextBlock - 富文本顯示框(繼承自 FrameworkElement, 請參見 /Controls/BaseControl/FrameworkElementDemo.xaml)
 *     TextPointer GetPositionFromPoint(Point point) - 獲取指定 Point 位置的 TextPointer 對象(關於 TextPointer 請參見 TextBlockDemo2.xaml.cs)
 */

using Windows.Foundation;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Documents;
using Windows.UI.Xaml.Input;

namespace Windows10.Controls.TextControl
{
    public sealed partial class RichTextBlockDemo : Page
    {
        public RichTextBlockDemo()
        {
            this.InitializeComponent();
        }

        private void richTextBlock_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Point position = e.GetPosition(richTextBlock);
            TextPointer textPointer = richTextBlock.GetPositionFromPoint(position);

            textBlock.Text = $"TextPointer.Offset: {textPointer.Offset}";
        }
    }
}


2、RichTextBlockOverflow 的示例
Controls/TextControl/RichTextBlockOverflowDemo.xaml

<Page
    x:Class="Windows10.Controls.TextControl.RichTextBlockOverflowDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.TexControlt"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10" Orientation="Horizontal">
            
            <RichTextBlock HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="100" 
                           OverflowContentTarget="{Binding ElementName=txtOverflow}">
                <Paragraph>
                    Hololens引領技術革命浪潮
傳統的人機交互,主要是通過鍵盤和觸摸,包括並不能被精確識別的語音等。Hololens的出現,則給新一代體驗更好的人機交互指明道路。在《瓦力》這部電影中,城市中每個人的面前都有一個可隨時按指令出現的全息屏,可以在上面執行各種任務,不用時馬上消失無形。Hololens所指向的未來,正是這部動畫片中的場景。在人機交互之外,還有人與人和人與環境的交互。虛擬現實能讓遠隔萬里的人坐在你面前與你促膝長談,也能讓你游覽你從未去過也沒可能去的地方,如撒哈拉沙漠、馬利亞納海溝、月球、火星。當前的虛擬現實技術能做到這一點,但還是要戴上連著無數電線的重重的頭盔,Hololens所做的,是把這些虛擬現實設備小型化和便攜化,至少是向前更近了一步。
想象一下,你在舊金山就能與北京總部進行實景會議,你的一舉一動,每個表情,都會被數據傳輸到北京後進行虛擬場景還原,北京那邊也一樣。你的各種家庭設備壞了,再也不需要去預約修理,會有技師手把手教你怎麼做,與真人在你身邊無異。大部分需要人與人之間進行實地交流的場景,都可以被Hololens所接管,所有的情感交流、商務會議、客服維修、團隊協作、線上教育,頓時變得簡單了,低成本化了。
在娛樂上Hololens能發揮的作用不必多說,心有多大,世界就有多大。你甚至能在自己的屋子裡近距離觀摩火山噴發,去火星上走一圈,沒準還能碰到外星人,或者通過對環境的研究發現一些科學家們尚未發現的東西。當然,微軟在推廣Hololens的策略里,似乎也是從娛樂開始的,他們收購了一款名為Minecraft的游戲,應用到這款機器上。
整個Hololens眼鏡相當於一臺小電腦,CPU和GPU都有,還有幾個攝像頭和感測器。Hololens使用的有可能是英特爾尚未發佈的Atom晶元,內部代號為Cherry Trail,據說是用14納米工藝流程製作出來的,體積更小,速度更快,代表了當前半導體工業的最高水準。
從技術趨勢上看,人類與電腦之間的交互方式,面臨著一場變革。觸屏的廣泛應用,根本不能算是迭代,更像是一種過渡狀態。一方面人們有拋棄鍵盤的內在需求,另一方面更加方便快捷的交互技術雖然已研發出來但還未得到應用。如果說鍵盤是1.0,觸屏就是1.5,在Hololens所啟示的那個場景實現之後,才是人機交互的2.0時代。也許Hololens會失敗,但其指出的這條道路是沒錯的。
Hololens打開的這扇門,絕不僅僅是虛擬現實那麼簡單,這其中隱藏的人機交互方式革命,是怎麼暢想也不過分的。用一個產品帶動一個龐大的相關產業和技術創新浪潮,在歷史上並不鮮見,而Hololens,則是最有希望帶動一波技術創新浪潮的那個產品,引領著人們進入激動人心的未來。
                </Paragraph>
            </RichTextBlock>

            <!--
                RichTextBlock - 富文本顯示框
                    OverflowContentTarget - 當此 RichTextBlock 中的內容溢出時,將溢出文字輸出到指定的 RichTextBlockOverflow 中(此知識點的演示參見:RichTextBlockOverflowDemo.xaml)
                    HasOverflowContent - 是否有溢出內容可顯示(只讀)
            
                RichTextBlockOverflow - 用於顯示 RichTextBlock 或其他 RichTextBlockOverflow 中的溢出文字
                    OverflowContentTarget - 當此 RichTextBlockOverflow 中的內容也溢出時,將溢出文字輸出到指定的其他 RichTextBlockOverflow 中
                    HasOverflowContent - 是否有溢出內容可顯示(只讀)
                    ContentSource - 獲取內容源(只讀),即對應的 RichTextBlock 對象
            -->
            <RichTextBlockOverflow Name="txtOverflow" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="100" 
                                   OverflowContentTarget="{Binding ElementName=txtOverflow2}" Margin="20 0 0 0" />

            <RichTextBlockOverflow Name="txtOverflow2" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="100" 
                                   OverflowContentTarget="{Binding ElementName=txtOverflow3}" Margin="20 0 0 0" />

            <RichTextBlockOverflow Name="txtOverflow3" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" Height="100" Margin="20 0 0 0" />
            
        </StackPanel>
    </Grid>
</Page>

Controls/TextControl/RichTextBlockOverflowDemo.xaml.cs

/*
 * RichTextBlockOverflow - 溢出文本顯示框,用於顯示 RichTextBlock 或其他 RichTextBlockOverflow 中的溢出文字(繼承自 FrameworkElement, 請參見 /Controls/BaseControl/FrameworkElementDemo.xaml)
 */

using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.TextControl
{
    public sealed partial class RichTextBlockOverflowDemo : Page
    {
        public RichTextBlockOverflowDemo()
        {
            this.InitializeComponent();
        }
    }
}


3、RichEditBox 的示例
Controls/TextControl/RichEditBoxDemo.xaml

<Page
    x:Class="Windows10.Controls.TextControl.RichEditBoxDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.TextControl"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="Transparent">
        <StackPanel Margin="10 0 10 10">
            
            <StackPanel Orientation="Horizontal">
                <Button Name="btnBold" Margin="5" Content="加粗" Click="btnBold_Click" />
                <Button Name="btnItalic" Margin="5" Content="斜體" Click="btnItalic_Click" />
                <TextBox Name="txtSearch" Margin="5" Width="200" />
                <Button Name="btnSearch" Margin="5" Content="搜索" Click="btnSearch_Click" />
            </StackPanel>

            <!--
                RichEditBox - 富文本編輯器控制項
            -->
            <RichEditBox x:Name="txtEditor" Width="480" Height="320" HorizontalAlignment="Left" Margin="5" />
            
        </StackPanel>
    </Grid>
</Page>

Controls/TextControl/RichEditBoxDemo.xaml.cs

/*
 * RichEditBox - 富文本編輯框(繼承自 Control, 請參見 /Controls/BaseControl/ControlDemo/)
 *     Document - 文檔對象,富文本編輯基本都是通過它實現的,本例中的示例代碼簡單介紹瞭如何使用,更詳細的說明請參見文檔
 *     其他屬性、方法和事件與 TextBox 基本相同,相關演示請參見 TextBoxDemo1.xaml 和 TextBoxDemo2.xaml
 *
 * 
 * 本例通過開發一個簡單的文本編輯器演示如何使用 RichEditBox 編輯文本
 */

using System.Collections.Generic;
using Windows.UI;
using Windows.UI.Text;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.TextControl
{
    public sealed partial class RichEditBoxDemo : Page
    {
        public RichEditBoxDemo()
        {
            this.InitializeComponent();
        }

        // 使選中的文字變為斜體
        private void btnItalic_Click(object sender, RoutedEventArgs e)
        {
            // 獲取選中的文本
            ITextSelection selectedText = txtEditor.Document.Selection;
            if (selectedText != null)
            {
                // 實體化一個 ITextCharacterFormat,指定字元格式為斜體
                ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
                charFormatting.Italic = FormatEffect.Toggle;

                // 設置選中文本的字元格式
                selectedText.CharacterFormat = charFormatting;
            }
        }

        // 使選中的文字加粗
        private void btnBold_Click(object sender, RoutedEventArgs e)
        {
            // 獲取選中的文本
            ITextSelection selectedText = txtEditor.Document.Selection;
            if (selectedText != null)
            {
                // 實體化一個 ITextCharacterFormat,指定字元格式為加粗
                ITextCharacterFormat charFormatting = selectedText.CharacterFormat;
                charFormatting.Bold = FormatEffect.Toggle;

                // 設置選中文本的字元格式
                selectedText.CharacterFormat = charFormatting;
            }
        }

        // 保存已經被高亮的 ITextRange
        List<ITextRange> _highlightedWords = new List<ITextRange>();
        // 高亮顯示用戶搜索的字元
        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            // 清除高亮字元的高亮效果
            ITextCharacterFormat charFormat;
            for (int i = 0; i < _highlightedWords.Count; i++)
            {
                charFormat = _highlightedWords[i].CharacterFormat;
                charFormat.BackgroundColor = Colors.Transparent;
                _highlightedWords[i].CharacterFormat = charFormat;
            }
            _highlightedWords.Clear();

            // 獲取全部文本,並將操作點移動到文本的起點
            ITextRange searchRange = txtEditor.Document.GetRange(0, TextConstants.MaxUnitCount);
            searchRange.Move(0, 0);

            bool textFound = true;
            do
            {
                // 在全部文本中搜索指定的字元串
                if (searchRange.FindText(txtSearch.Text, TextConstants.MaxUnitCount, FindOptions.None) < 1)
                {
                    textFound = false;
                }
                else
                {
                    _highlightedWords.Add(searchRange.GetClone());

                    // 實體化一個 ITextCharacterFormat,指定字元背景顏色為黃色
                    ITextCharacterFormat charFormatting = searchRange.CharacterFormat;
                    charFormatting.BackgroundColor = Colors.Orange;

                    // 設置指定文本的字元格式(高亮效果)
                    searchRange.CharacterFormat = charFormatting;
                }
            } while (textFound);
        }
    }
}



OK
[源碼下載]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前mysql用著好著,可是今天在啟動mysql後輸入密碼出現了閃退,在任務管理器中發現mysql服務沒有啟動,當手動啟動時提示拒絕訪問。在網上查找原因發現問題所在。 問題原因:mysql服務沒有安裝。 解決辦法: 在cmd操作下找到mysql的安裝目錄(註意要用管理員身份運行cmd) 在 mysq ...
  • 雲時代的資料庫管理,在不斷的演化,對DBA也提出更高的要求。去IOE其本意是,在阿裡巴巴的IT架構中,去掉IBM的小型機、Oracle資料庫、EMC存儲設備,代之以自己在開源軟體基礎上開發的系統。 去IOE原因除了錢,關鍵是用錢買的產品已經不能解決業務問題。 下麵讓我們來看一下: 電商 讓研發具備D... ...
  • 1.1trunc函數處理數字 trunc函數返回處理後的數值,其工作機制與ROUND函數極為類似,只是該函數不對指定小數前或後的部分做相應舍入選擇處理,而統統截去。 其具體的語法格式如下 TRUNC(number[,decimals]) 其中: number 待做截取處理的數值 decimals 指 ...
  • RT 1.這裡解釋幾個主要的子函數,首先是task_timeslice,重新計算時間片。首先介紹一下基本時間片的概念。 靜態優先順序本質上決定了進程的基本時間片,即進程用完了以前的時間片時,系統分配給進程的時間片長度。靜態優先順序和基本時間片的關係用下列公式確定: 如你所見,靜態優先順序越高(其值越小), ...
  • 我準備安裝到/usr/local目錄下 1. cd /usr/local 2. 安裝GCC 和GCC-C++ yum install gcc yum install -y gcc gcc-c++ 3. 安裝pcre庫 cd /usr/local/wget ftp://ftp.csx.cam.ac.u ...
  • 原文地址:http://ncforest.blog.163.com/blog/static/295626642007551417331/ 1.sudo的配置文件是/etc/sudoers ,我們可以用他的專用編輯工具visodu ,此工具的好處是在添加規則不太準確時,保存退出時會提示給我們錯誤信息; ...
  • 摘自:http://www.apelearn.com/bbs/thread-7467-1-1.html 一. 使用 su 命令臨時切換用戶身份 1、su 的適用條件和威力 su命令就是切換用戶的工具,怎麼理解呢?比如我們以普通用戶beinan登錄的,但要添加用戶任務,執行useradd ,beina ...
  • kali的openvas安裝 留下筆記,以便下次再查開始在kali找openvas,竟然kali不自帶,害的要下載。 apt-get updateapt-get dist-upgradeapt-get install openvas (我記得大約要下600M左右)安裝完後openvas-setupo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...