背水一戰 Windows 10 (49) - 控制項(集合類): Pivot, Hub

来源:http://www.cnblogs.com/webabcd/archive/2017/05/19/6876475.html
-Advertisement-
Play Games

背水一戰 Windows 10 之 控制項(集合類): Pivot, Hub ...


[源碼下載]


背水一戰 Windows 10 (49) - 控制項(集合類): Pivot, Hub



作者:webabcd


介紹
背水一戰 Windows 10 之 控制項(集合類)

  • Pivot
  • Hub



示例
1、Pivot 的示例
Controls/CollectionControl/PivotDemo.xaml

<Page
    x:Class="Windows10.Controls.CollectionControl.PivotDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.CollectionControl"
    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">

            <!--
                Pivot - Pivot 控制項
                    Title, TitleTemplate - 標題
                    LeftHeader, LeftHeaderTemplate - 左側 header
                    RightHeader, RightHeaderTemplate - 右側 header
                    HeaderTemplate - PivotItem 的 Header 的 DataTemplate
                    SelectionChanged - 選中的 item 發生變化時觸發的事件
                    PivotItemUnloading - Pivot 內的某個 PivotItem 準備變成選中項時觸發的事件
                    PivotItemLoaded - Pivot 內的某個 PivotItem 已經變成選中項時觸發的事件
                    PivotItemUnloading - Pivot 內的某個 PivotItem 準備從選中項變為非選中項時觸發的事件
                    PivotItemUnloaded - Pivot 內的某個 PivotItem 已經從選中項變為非選中項時觸發的事件
            
                PivotItem - PivotItem 控制項
                    Header - 用於指定 PivotItem 的 Header,需要通過 Pivot.HeaderTemplate 來設置其 DataTemplate
            -->
            
            <Pivot Name="pivot" Title="pivot title" Margin="5" 
                   SelectionChanged="pivot_SelectionChanged" 
                   PivotItemLoading="pivot_PivotItemLoading" PivotItemLoaded="pivot_PivotItemLoaded" PivotItemUnloading="pivot_PivotItemUnloading" PivotItemUnloaded="pivot_PivotItemUnloaded">
                <Pivot.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}" Foreground="Red" />
                    </DataTemplate>
                </Pivot.HeaderTemplate>
                <Pivot.LeftHeader>
                    <TextBlock Text="left header" />
                </Pivot.LeftHeader>
                <Pivot.RightHeader>
                    <TextBlock Text="right header" />
                </Pivot.RightHeader>

                <PivotItem Header="pivot item header 1">
                    <TextBlock Text="pivot item content 1" />
                </PivotItem>
                <PivotItem Header="pivot item header 2">
                    <TextBlock Text="pivot item content 2" />
                </PivotItem>
                <PivotItem Header="pivot item header 3">
                    <TextBlock Text="pivot item content 3" />
                </PivotItem>
            </Pivot>

            <Button Name="btnLock" Content="對 pivot 鎖定或解除鎖定" Margin="5" Click="btnLock_Click" />

            <StackPanel Orientation="Horizontal">
                <TextBlock Name="lblMsg1" Margin="5" />
                <TextBlock Name="lblMsg2" Margin="5" />
            </StackPanel>

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

Controls/CollectionControl/PivotDemo.xaml.cs

/*
 * Pivot - Pivot 控制項(繼承自 ItemsControl, 請參見 /Controls/CollectionControl/ItemsControlDemo/)
 *     IsLocked - 是否鎖定 Pivot,鎖定後只會顯示當前選中的 item,而不能切換
 *     SelectedItem - 當前選中的 item
 *     SelectedIndex - 當前選中的 item 的索引位置
 *     
 * PivotItem - PivotItem 控制項(繼承自 ContentControl, 請參見 /Controls/BaseControl/ContentControlDemo/)
 */

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

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

        private void btnLock_Click(object sender, RoutedEventArgs e)
        {
            pivot.IsLocked ^= true; 
        }

        private void pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // e.RemovedItems - 本次事件中,被取消選中的項
            // e.AddedItems - 本次事件中,新被選中的項

            lblMsg1.Text = "SelectionChangedEventArgs.AddedItems: " + (e.AddedItems[0] as PivotItem).Header.ToString();
            lblMsg1.Text += Environment.NewLine;
            lblMsg1.Text += "Pivot.SelectedIndex: " + pivot.SelectedIndex;
            lblMsg1.Text += Environment.NewLine;
            lblMsg1.Text += "Pivot.SelectedItem: " + (pivot.SelectedItem as PivotItem).Header.ToString();
        }

        // 某 PivotItem 準備變成選中項
        private void pivot_PivotItemLoading(Pivot sender, PivotItemEventArgs args)
        {
            // args.Item - 相關的 PivotItem 對象

            lblMsg2.Text += "pivot_PivotItemLoading: " + args.Item.Header.ToString();
            lblMsg2.Text += Environment.NewLine;
        }

        // 某 PivotItem 已經變成選中項
        private void pivot_PivotItemLoaded(Pivot sender, PivotItemEventArgs args)
        {
            lblMsg2.Text += "pivot_PivotItemLoaded: " + args.Item.Header.ToString();
            lblMsg2.Text += Environment.NewLine;
        }

        // 某 PivotItem 準備從選中項變為非選中項
        private void pivot_PivotItemUnloading(Pivot sender, PivotItemEventArgs args)
        {
            lblMsg2.Text += "pivot_PivotItemUnloading: " + args.Item.Header.ToString();
            lblMsg2.Text += Environment.NewLine;
        }

        // 某 PivotItem 已經從選中項變為非選中項
        private void pivot_PivotItemUnloaded(Pivot sender, PivotItemEventArgs args)
        {
            lblMsg2.Text += "pivot_PivotItemUnloaded: " + args.Item.Header.ToString();
            lblMsg2.Text += Environment.NewLine;
        }
    }
}


2、Hub 的示例
Controls/CollectionControl/HubDemo.xaml

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

    <Grid Background="Transparent">

        <TextBlock Name="lblMsg" Margin="10 0 10 10" Width="200" TextWrapping="Wrap" HorizontalAlignment="Left" />
        
        <SemanticZoom Margin="210 0 10 10">
            <SemanticZoom.ZoomedInView>

                <!--
                    Hub - Hub 控制項
                        DefaultSectionIndex - hub 初始化時,被選中的 HubSection 的索引位置
                        Header, HeaderTemplate - hub 的 header
                        Orientation - hub 的子元素們的排列方式(Horizontal, Vertical)
                        Sections - hub 的 HubSection([ContentProperty(Name = "Sections")])
                        SectionHeaderClick - 點擊 HubSection 右上角的“查看更多”按鈕時觸發的事件
                        SectionsInViewChanged - 可視區中的 HubSection 發生變化時觸發的事件
                
                
                    HubSection - HubSection 控制項
                        Header, HeaderTemplate - HubSection 的 header
                        ContentTemplate - HubSection 的控制項模板([ContentProperty(Name = "ContentTemplate")])
                        IsHeaderInteractive - 是否顯示 HubSection 右上角的“查看更多”按鈕
                -->

                <Hub Name="hub" Orientation="Horizontal" Header="hub title" DefaultSectionIndex="1" SectionHeaderClick="hub_SectionHeaderClick" SectionsInViewChanged="hub_SectionsInViewChanged">
                    <HubSection Background="Orange" IsHeaderInteractive="False" Header="hub section header 1">
                        <DataTemplate>
                            <TextBlock Text="hub section content 1" />
                        </DataTemplate>
                    </HubSection>
                    <HubSection Background="Orange" IsHeaderInteractive="False" Header="hub section header 2">
                        <DataTemplate>
                            <TextBlock Text="hub section content 2" />
                        </DataTemplate>
                    </HubSection>
                    <HubSection Background="Orange" IsHeaderInteractive="False" Header="hub section header 3">
                        <DataTemplate>
                            <TextBlock Text="hub section content 3" />
                        </DataTemplate>
                    </HubSection>
                    <HubSection Background="Orange" IsHeaderInteractive="True" Header="hub section header 4">
                        <DataTemplate>
                            <TextBlock Text="hub section content 4" />
                        </DataTemplate>
                    </HubSection>
                    <HubSection Background="Orange" IsHeaderInteractive="True" Header="hub section header 5">
                        <DataTemplate>
                            <TextBlock Text="hub section content 5" />
                        </DataTemplate>
                    </HubSection>
                    <HubSection Background="Orange" IsHeaderInteractive="True" Header="hub section header 6">
                        <DataTemplate>
                            <TextBlock Text="hub section content 6" />
                        </DataTemplate>
                    </HubSection>
                </Hub>
            </SemanticZoom.ZoomedInView>

            <SemanticZoom.ZoomedOutView>
                <ListView x:Name="listView"/>
            </SemanticZoom.ZoomedOutView>
        </SemanticZoom>

    </Grid>
</Page>

Controls/CollectionControl/HubDemo.xaml.cs

/*
 * Hub - Hub 控制項(繼承自 Control, 請參見 /Controls/BaseControl/ControlDemo/)
 *     SectionsInView - 用於獲取當前可視區中顯示的全部 HubSection 集合
 *     SectionHeaders - 用於獲取當前可視區中顯示的全部 HubSection 對象的 Header 集合
 *        
 * HubSection - HubSection 控制項(繼承自 Control, 請參見 /Controls/BaseControl/ControlDemo/)
 *        
 *
 * 註:
 * Hub 實現了 ISemanticZoomInformation 介面,所以可以在 SemanticZoom 的兩個視圖間有關聯地切換。關於 ISemanticZoomInformation 請參見 /Controls/CollectionControl/SemanticZoomDemo/ISemanticZoomInformationDemo.xaml
 */

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

namespace Windows10.Controls.CollectionControl
{
    public sealed partial class HubDemo : Page
    {
        public HubDemo()
        {
            this.InitializeComponent();

            this.Loaded += HubDemo_Loaded;
        }

        private void HubDemo_Loaded(object sender, RoutedEventArgs e)
        {
            // 拿到所有 HubSection 的 header 集合
            List<string> headers = new List<string>();
            foreach (HubSection section in hub.Sections)
            {
                if (section.Header != null)
                {

                    headers.Add(section.Header.ToString());
                }
            }
            
            listView.ItemsSource = headers;
        }

        private void hub_SectionHeaderClick(object sender, HubSectionHeaderClickEventArgs e)
        {
            // 獲取通過點擊 HubSection 右上角的“查看更多”按鈕而被選中的 HubSection 對象
            lblMsg.Text = "hub_SectionHeaderClick: " + e.Section.Header.ToString();
        }

        private void hub_SectionsInViewChanged(object sender, SectionsInViewChangedEventArgs e)
        {
            lblMsg.Text = "";

            // 此次在 hub 中移出的 HubSection
            if (e.RemovedSections.Count > 0)
            {
                lblMsg.Text += "hub_SectionsInViewChanged RemovedSections: " + e.RemovedSections[0].Header.ToString();
                lblMsg.Text += Environment.NewLine;
            }

            // 此次在 hub 中移入的 HubSection
            if (e.AddedSections.Count > 0)
            {
                lblMsg.Text += "hub_SectionsInViewChanged AddedSections: " + e.AddedSections[0].Header.ToString();
                lblMsg.Text += Environment.NewLine;
            }

            lblMsg.Text += "hub.SectionsInView: ";
            lblMsg.Text += Environment.NewLine;
            // 可視區中顯示的全部 HubSection
            foreach (var item in hub.SectionsInView)
            {
                lblMsg.Text += item.Header.ToString();
                lblMsg.Text += Environment.NewLine;
            }
        }
    }
}



OK
[源碼下載]


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

-Advertisement-
Play Games
更多相關文章
  • 文件的壓縮與解壓 常用命令和參數 1 gzip -c 將壓縮或解壓的結果輸出至標準輸出 -d 解壓縮,相當於guzip -# (1-9)指定壓縮比,預設為6。 zcat 不解壓縮的情況下查看文件。 壓縮:gzip FileName 解壓:gzip –d FileName.gz 2 bzip2 -d ...
  • 實在受不了在Windows下編程,所以自己就安裝了一個Ubutun,公司用的翻牆軟體shadowsocks在Windows上用起來很簡單很爽,但是在Ubutun上的安裝和配置就沒那麼簡單了,寫下這篇文章,希望需要的朋友能簡單快速的搞定shadowsocks的安裝和配置 1.安裝 在命令行執行上面的三 ...
  • 8.1 實例構造器和類(引用類型) 構造引用類型的對象時,在調用類型的實例構造器之前,為對象分配的記憶體總是先被歸零 。沒有被構造器顯式重寫的所有欄位都保證獲得 0 或 null 值。 構造器不能被繼承。不能使用以下修飾符: virtual,new,override,sealed和abstract. ...
  • IDE:VisualStudio 2017 Language:VB.NET/C# 圖形API:Win2D 游戲引擎:ExperDot.EDGameEngine 本文將向你介紹一種粒子系統(Partical System)模擬植物的簡單方法。 第一節 移動 粒子將按照某種規則移動,且始終保留移動軌跡。 ...
  • 本文內容是本人參考多本經典C 書籍和一些前輩的博文做的總結 儘管.NET運行庫負責處理大部分記憶體管理工作,但C 程式員仍然必須理解記憶體管理的工作原理,瞭解如何高效地處理非托管的資源,才能在非常註重性能的系統中高效地處理記憶體。 C 編程的一個優點就是程式員不必擔心具體的記憶體管理,垃圾回收器會自動處理所 ...
  • redis 介紹和常用命令 redis簡介 Redis 是一款開源的,基於 BSD 許可的,高級鍵值 (key-value) 緩存 (cache) 和存儲 (store) 系統。由於 Redis 的鍵包括 string,hash,list,set,sorted set,bitmap 和 hyperl ...
  • 此貼為本人原創,轉載請註明出處 序 前幾天更新了被打入冷宮很久的酷狗,等進入之後就感覺菊花一緊————試 聽 居 然 都 要 開 通 音 樂 包(高品和無損)才行了,WTF! 這意味著以前緩存的都聽不了了,本著好馬不吃回頭草的原則,不打算去降級了,下載PJ版的又擔心被植入惡意代碼,心好累╮(╯▽╰) ...
  • 在部署IIS環境中,偶爾會遇到 404 錯誤,就算以前遇到過,也因為時間久了導致大概知道是什麼錯了,具體解決方案覺忘了,所以留下一個記錄,留給自己,也是給大家一點提醒。(註:錯誤信息也懶得截圖了,希望大家諒解) 1.百度看到好多人說在web.config文件中添加modules runAllMana ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...