背水一戰 Windows 10 (36) - 控制項(彈出類): ToolTip, Popup, PopupMenu

来源:http://www.cnblogs.com/webabcd/archive/2016/09/26/5907840.html
-Advertisement-
Play Games

背水一戰 Windows 10 之 控制項(彈出類): ToolTip, Popup, PopupMenu ...


[源碼下載]


背水一戰 Windows 10 (36) - 控制項(彈出類): ToolTip, Popup, PopupMenu



作者:webabcd


介紹
背水一戰 Windows 10 之 控制項(彈出類)

  • ToolTip
  • Popup
  • PopupMenu



示例
1、ToolTip 的示例
Controls/FlyoutControl/ToolTipDemo.xaml

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

            <!--
                ToolTip - 提示框控制項
                    Content - 提示內容
                    Placement - 提示框的顯示位置(Bottom, Right, Mouse, Left, Top)
                    HorizontalOffset - 水平偏移量
                    VerticalOffset - 垂直偏移量
                    IsOpen - 提示框是否是顯示狀態(如果要設置此屬性的話,需要等到宿主載入完之後再設置)
                    Closed - 提示框關閉後觸發的事件
                    Opened - 提示框打開後觸發的事件
            -->

            <TextBlock Name="textBlock1" Text="TextBlock" Margin="5"
                       ToolTipService.ToolTip="ToolTip 的內容" 
                       ToolTipService.Placement="Right" />

            <TextBlock Name="textBlock2" Text="TextBlock" Margin="5">
                <ToolTipService.ToolTip>
                   <ToolTip Content="ToolTip 的內容" Placement="Mouse" 
                            HorizontalOffset="120" VerticalOffset="0"
                            Opened="toolTip_Opened" Closed="toolTip_Closed" />
                </ToolTipService.ToolTip>
            </TextBlock>
            <TextBlock Name="lblMsg" Margin="5" />

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

Controls/FlyoutControl/ToolTipDemo.xaml.cs

/*
 * ToolTip - 提示框控制項(繼承自 ContentControl, 請參見 /Controls/BaseControl/ContentControlDemo/)
 */

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

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

        private void toolTip_Opened(object sender, RoutedEventArgs e)
        {
            lblMsg.Text = "textBlock2 toolTip_Opened";
        }

        private void toolTip_Closed(object sender, RoutedEventArgs e)
        {
            lblMsg.Text = "textBlock2 toolTip_Closed";
        }
    }
}


2、Popup 的示例
Controls/FlyoutControl/PopupDemo.xaml

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

            <!--
                Popup - 彈出框控制項
                    Child - 彈出框的內容([ContentProperty(Name = "Child")]),一個 UIElement 類型的對象
                    ChildTransitions - 顯示彈出框時,其內容的過渡效果
                    IsLightDismissEnabled - 點擊非 Popup 區域時否關閉 Popup
                    HorizontalOffset - 水平方向上的偏移量
                    VerticalOffset - 垂直方向上的偏移量
            -->
            <Popup Name="popup" Margin="5" 
                   HorizontalOffset="200" VerticalOffset="10" IsLightDismissEnabled="{Binding IsChecked, ElementName=chkIsLightDismissEnabled}">
                <Border BorderBrush="Red" BorderThickness="1" Background="Orange" Width="200" Height="200">
                    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
                        <TextBlock Text="我是 Popup" HorizontalAlignment="Center" />
                        <Button Name="btnClosePopup" Content="關閉" HorizontalAlignment="Center" Click="btnClosePopup_Click" />
                    </StackPanel>
                </Border>
                <!--為彈出框增加 PopupThemeTransition 效果-->
                <Popup.ChildTransitions>
                    <TransitionCollection>
                        <PopupThemeTransition />
                    </TransitionCollection>
                </Popup.ChildTransitions>
            </Popup>
            <TextBlock Name="lblMsg" Margin="5" />


            <!--
                顯示 xaml 方式定義的 popup
            -->
            <StackPanel Orientation="Horizontal" Margin="5">
                <Button Name="btnOpenPopup" Content="彈出 Popup" Click="btnOpenPopup_Click" />
                <CheckBox Name="chkIsLightDismissEnabled" IsChecked="False" Content="IsLightDismissEnabled" Margin="10 0 0 0" />
            </StackPanel>


            <!--
                顯示 code-behind 方式定義的 popup
            -->
            <Button Name="btnOpenPopupToast" Content="彈出仿 toast 的 Popup" Click="btnOpenPopupToast_Click" Margin="5" />

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

Controls/FlyoutControl/PopupDemo.xaml.cs

/*
 * Popup - 彈出框控制項(繼承自 FrameworkElement, 請參見 /Controls/BaseControl/FrameworkElementDemo.xaml)
 *     IsOpen - 彈出框是否是打開的狀態(如果要設置此屬性,需要在控制項載入之後)
 *     Opened - 彈出框打開後觸發的事件
 *     Closed - 彈出框關閉後觸發的事件
 */

using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Animation;

namespace Windows10.Controls.FlyoutControl
{
    public sealed partial class PopupDemo : Page
    {
        // 仿 toast 的 Popup
        private Popup _popupToast = new Popup();

        public PopupDemo()
        {
            this.InitializeComponent();

            popup.Opened += delegate { lblMsg.Text = "popup.Opened"; };
            popup.Closed += delegate { lblMsg.Text = "popup.Closed"; };
        }

        private void btnOpenPopup_Click(object sender, RoutedEventArgs e)
        {
            if (!popup.IsOpen)
                popup.IsOpen = true;
        }

        private void btnClosePopup_Click(object sender, RoutedEventArgs e)
        {
            if (popup.IsOpen)
                popup.IsOpen = false;
        }

        private void btnOpenPopupToast_Click(object sender, RoutedEventArgs e)
        {
            if (!_popupToast.IsOpen)
            {
                // 設置 Popup 中的內容
                Border border = new Border();
                border.BorderBrush = new SolidColorBrush(Colors.Red);
                border.BorderThickness = new Thickness(1);
                border.Background = new SolidColorBrush(Colors.Blue);
                border.Width = 600;
                border.Height = 100;
                border.Child = new TextBlock() { Text = "我是 Popup", HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };

                // 設置 Popup 的相關屬性
                _popupToast.IsLightDismissEnabled = true;
                _popupToast.Child = border;
                _popupToast.VerticalOffset = 100d; // 設置 Popup 的顯示位置(Popup 的預設顯示位置在視窗 0,0 點)
                _popupToast.ChildTransitions = new TransitionCollection() { new PaneThemeTransition() { Edge = EdgeTransitionLocation.Left } };

                _popupToast.IsOpen = true;
            }
        }
    }
}


3、PopupMenu 的示例
Controls/FlyoutControl/PopupMenuDemo.xaml

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

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

            <TextBlock Name="lblDemo" Margin="5">
                滑鼠右鍵我或觸摸 press-and-hold 我,以彈出 PopupMenu
            </TextBlock>

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

Controls/FlyoutControl/PopupMenuDemo.xaml.cs

/*
 * PopupMenu - 上下文菜單(未繼承任何類)
 *     Commands - 上下文菜單中的命令集合,返回 IList<IUICommand> 類型的數據
 *     IAsyncOperation<IUICommand> ShowAsync(Point invocationPoint) - 在指定的位置(PopupMenu 的預設顯示位置在視窗 0,0 點)上顯示上下文菜單,並返回用戶激發的命令
 *     IAsyncOperation<IUICommand> ShowForSelectionAsync(Rect selection, Placement preferredPlacement) - 在指定的矩形區域的指定方位顯示上下文菜單,並返回用戶激發的命令
 *     
 * IUICommand - 命令
 *     Label - 顯示的文字
 *     Id - 參數
 *
 * UICommandSeparator - 分隔符
 */

using System;
using Windows.UI.Popups;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows10.Common;

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

            lblDemo.RightTapped += lblDemo_RightTapped;
        }

        private async void lblDemo_RightTapped(object sender, RightTappedRoutedEventArgs e)
        {
            PopupMenu menu = new PopupMenu();

            menu.Commands.Add
            (
                new UICommand
                (
                    "item1", 
                    (command) =>
                    {
                        lblMsg.Text = string.Format("command label:{0}, id:{1}", command.Label, command.Id);
                    }, 
                    "param1"
                )
            );

            menu.Commands.Add
            (
                new UICommand
                (
                    "item2", 
                    (command) =>
                    {
                        lblMsg.Text = string.Format("command label:{0}, id:{1}", command.Label, command.Id);
                    }, 
                    "param2"
                )
            );

            // 分隔符
            menu.Commands.Add(new UICommandSeparator());

            menu.Commands.Add
            (
                new UICommand
                (
                    "item3",
                    (command) =>
                    {
                        lblMsg.Text = string.Format("command label:{0}, id:{1}", command.Label, command.Id);
                    }, 
                    "param3"
                )
            );


            // 在指定的位置顯示上下文菜單,並返回用戶激發的命令(測試的時候這裡有時會發生異常,不知道什麼原因,所以還是儘量用 MenuFlyout 吧)
            IUICommand chosenCommand = await menu.ShowForSelectionAsync(Helper.GetElementRect((FrameworkElement)sender), Placement.Below);
            if (chosenCommand == null) // 用戶沒有在上下文菜單中激發任何命令
            {
                lblMsg.Text = "用戶沒有選擇任何命令";
            }
            else
            {
                lblMsg.Text += Environment.NewLine;
                lblMsg.Text += string.Format("result label:{0}, id:{1}", chosenCommand.Label, chosenCommand.Id);
            }
        }
    }
}



OK
[源碼下載]


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

-Advertisement-
Play Games
更多相關文章
  • 1. select count(*) from table; //統計元組個數 2. select count(列名) from table; //統計一列中值的個數 3. select count(*) from table where 欄位 = ""; //符合該條件的記錄總數 4. sql_c ...
  • 三、組織機構轉換(異構抽取) 上述講到的都是一些通用的表抽取作業程式,中間不做任何轉換,所以過程非常簡單和通用,下麵要開始進入需要數據轉換的部分,首先是從設備信息系統獲取組織機構部分,並轉換到mp平臺上,整個過程與之前的大致相同。 在最後一步導入數據之前會做組織機構類型對應,進入第3個轉換程式。 該 ...
  • 主要涉及:JOIN 、JOIN 更新、GROUP BY HAVING 數據查重/去重 ...
  • http://www.cnblogs.com/lyhabc/p/3533027.html 一般的交易系統裡面我們都會以自增列或交易時間列作為聚集索引列,因為一般這些系統都是寫多讀少 每天的交易數據會不停的插入到資料庫,但是讀取數據就沒有數據插入那麼頻繁 因為這些系統一般是寫多讀少,所以我們會選擇在自 ...
  • 本案例是一個小型數據抽取分析類系統,通過抽取數據共用中心中的配網台區(一個台區一個配變)的相關數據進行整合,完成有關台區的50多個欄位按照日、月、多月等維度的集中計算展示。新使用的控制項有:作業、轉換、檢驗欄位的值、使用javascript腳本驗證、等待、設置變數、表輸入、資料庫連接、表輸出(同構)、... ...
  • 瞭解: Yum:Yellowdog Updater,Modified的簡稱,起初由yellow dog發行版的開發者Terra Soft研發,用Python編寫,後經杜克大學的Linux@Duke開發團隊進行改進,遂有此名。Yum是一個shell前端軟體包管理器,基於RPM包管理,能夠從指定的伺服器 ...
  • 最近在開發服務後臺的時候,使用c#調用了多個c++編寫的dll,期間遇到了一系列的問題,經過一番努力最後都一一解決了,在此做個總結,方便以後參考。主要有:類型對照問題、記憶體釋放問題、版本問題、編譯問題、資源載入問題、異常捕獲與問題定位、vs實時調試問題等。 ...
  • 前言 面向對象三大基本特性:封裝、繼承、多態。上一篇中介紹了類的定義,下麵就瞭解下F 中繼承和多態的使用吧。
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...