[源码下载]

背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout

作者:webabcd

介绍
背水一战 Windows 10 之 控件(弹出类)

  • FlyoutBase
  • Flyout
  • MenuFlyout

示例
1、FlyoutBase(基类) 的示例
Controls/FlyoutControl/FlyoutBaseDemo.xaml

<Page
x:Class="Windows10.Controls.FlyoutControl.FlyoutBaseDemo"
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"> <Page.Resources> <!--
通过资源的方式定义 flyout 的样式和内容
-->
<Flyout x:Key="MyFlyout">
<StackPanel>
<TextBlock Text="我是 Flyout 中的内容" />
</StackPanel>
</Flyout> </Page.Resources> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <!--
Flyout - 弹出框控件,继承自 FlyoutBase,下面介绍 FlyoutBase 的相关知识点
Placement - 弹出框的显示位置
Top - 目标元素的上边(默认值)
Bottom - 目标元素的下边
Left - 目标元素的左边
Right - 目标元素的右边
Full - 屏幕中央
Opening - 弹出框准备显示时触发的事件
Opened - 弹出框显示之后触发的事件
Closed - 弹出框隐藏之后触发的事件
--> <!--
FlyoutBase 的用法 1
部分控件本身有 Flyout 属性,比如 Button 控件,可以通过其 Flyout 属性直接为其绑定 FlyoutBase 控件及行为(单击按钮后就会显示此 FlyoutBase 控件)
-->
<Button Name="button1" Margin="5" Content="按我弹出 Flyout">
<Button.Flyout>
<Flyout x:Name="flyout1" Placement="Right" Opening="flyout1_Opening" Opened="flyout1_Opened" Closed="flyout1_Closed">
<StackPanel>
<TextBlock>我是 Flyout 中的内容</TextBlock>
<Button x:Name="button1CloseFlyout" Click="button1CloseFlyout_Click">隐藏 Flyout</Button>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
<TextBlock Name="lblMsg1" Margin="5" /> <!--
FlyoutBase 的用法 2
通过附加属性 FlyoutBase.AttachedFlyout 为指定的控件绑定 FlyoutBase 控件(何时显示需要在 CodeBehind 中控制)
-->
<TextBlock Name="textBlock1" Margin="5" Text="按我弹出 Flyout" Tapped="textBlock1_Tapped" FontSize="18">
<FlyoutBase.AttachedFlyout>
<Flyout Placement="Right">
<TextBlock Text="我是 Flyout 中的内容" />
</Flyout>
</FlyoutBase.AttachedFlyout>
</TextBlock> <!--
FlyoutBase 的用法 3
此用法同用法 2,不同之处在于这里把 flyout 的样式和内容放到资源中定义了
-->
<TextBlock Name="textBlock2" Margin="5" Text="按我弹出 Flyout" Tapped="textBlock2_Tapped" FontSize="18"
FlyoutBase.AttachedFlyout="{StaticResource MyFlyout}" /> <!--
FlyoutBase 的用法 4
在 CodeBehind 中创建 FlyoutBase 控件后,将其绑定到指定的控件上,并显示
-->
<TextBlock Name="textBlock3" Margin="5" Text="按我弹出 Flyout" Tapped="textBlock3_Tapped" FontSize="18" /> <!--
FlyoutBase 的用法 5
在 CodeBehind 中创建 FlyoutBase 控件后,在不设置绑定的情况下,使其显示在指定的控件上
-->
<TextBlock Name="textBlock4" Margin="5" Text="按我弹出 Flyout" Tapped="textBlock4_Tapped" FontSize="18" /> </StackPanel>
</Grid>
</Page>

Controls/FlyoutControl/FlyoutBaseDemo.xaml.cs

/*
* FlyoutBase(基类) - 弹出框控件基类(继承自 DependencyObject, 请参见 /Controls/BaseControl/DependencyObjectDemo.xaml)
* Hide() - 隐藏 Flyout
* ShowAt(FrameworkElement targetElement) - 在指定的 FrameworkElement 上显示指定的 Flyout
*
* FlyoutBase.SetAttachedFlyout(FrameworkElement element, FlyoutBase value) - 在指定的 FrameworkElement 上绑定指定的 Flyout
* FlyoutBase.GetAttachedFlyout(FrameworkElement element) - 获取指定的 FrameworkElement 上绑定的 Flyout
* FlyoutBase.ShowAttachedFlyout(FrameworkElement flyoutOwner) - 在指定的 FrameworkElement 上显示其绑定的 Flyout
*
*
* 注:点击 FlyoutBase 外部的话,FlyoutBase 会自动关闭
*
* 另外,在 uwp 中不再支持 SettingsFlyout 了
*/ using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Input; namespace Windows10.Controls.FlyoutControl
{
public sealed partial class FlyoutBaseDemo : Page
{
public FlyoutBaseDemo()
{
this.InitializeComponent();
} private void flyout1_Opening(object sender, object e)
{
lblMsg1.Text = "Flyout 打开中";
}
private void flyout1_Opened(object sender, object e)
{
lblMsg1.Text = "Flyout 已打开";
}
private void flyout1_Closed(object sender, object e)
{
lblMsg1.Text = "Flyout 已关闭";
}
private void button1CloseFlyout_Click(object sender, RoutedEventArgs e)
{
flyout1.Hide();
} private void textBlock1_Tapped(object sender, TappedRoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout(textBlock1);
} private void textBlock2_Tapped(object sender, TappedRoutedEventArgs e)
{
FlyoutBase flyout = FlyoutBase.GetAttachedFlyout(textBlock2);
flyout.Placement = FlyoutPlacementMode.Right; FlyoutBase.ShowAttachedFlyout(textBlock2);
} // 在 CodeBehind 中创建 FlyoutBase 控件后,将其绑定到指定的控件上,并显示
private void textBlock3_Tapped(object sender, TappedRoutedEventArgs e)
{
TextBlock flyoutContent = new TextBlock();
flyoutContent.Text = "我是 Flyout 中的内容"; Flyout flyout = new Flyout();
flyout.Placement = FlyoutPlacementMode.Right;
flyout.Content = flyoutContent; FlyoutBase.SetAttachedFlyout(textBlock3, flyout);
FlyoutBase.ShowAttachedFlyout(textBlock3);
} // 在 CodeBehind 中创建 FlyoutBase 控件后,在不设置绑定的情况下,使其显示在指定的控件上
private void textBlock4_Tapped(object sender, TappedRoutedEventArgs e)
{
TextBlock flyoutContent = new TextBlock();
flyoutContent.Text = "我是 Flyout 中的内容"; Flyout flyout = new Flyout();
flyout.Placement = FlyoutPlacementMode.Right;
flyout.Content = flyoutContent; flyout.ShowAt(textBlock4);
}
}
}

2、Flyout 的示例
Controls/FlyoutControl/FlyoutDemo.xaml

<Page
x:Class="Windows10.Controls.FlyoutControl.FlyoutDemo"
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"> <!--
Flyout - 弹出框控件
FlyoutPresenterStyle - 用于定义 Flyout 的样式
--> <!--
xaml 方式指定 flyout
-->
<Button Name="button1" Margin="5" Content="按我弹出 Flyout">
<Button.Flyout>
<Flyout Placement="Right">
<StackPanel>
<TextBlock Text="我是 Flyout 中的内容" Foreground="White" FontSize="24" />
</StackPanel>
<Flyout.FlyoutPresenterStyle>
<Style TargetType="FlyoutPresenter">
<Setter Property="ScrollViewer.ZoomMode" Value="Enabled"/>
<Setter Property="Background" Value="Blue"/>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="10"/>
<Setter Property="MinHeight" Value="300"/>
<Setter Property="MinWidth" Value="300"/>
</Style>
</Flyout.FlyoutPresenterStyle>
</Flyout>
</Button.Flyout>
</Button> <!--
code-behind 方式指定 flyout
-->
<TextBlock Name="textBlock1" Margin="5" Text="按我弹出 Flyout" Tapped="textBlock1_Tapped" FontSize="18" /> </StackPanel>
</Grid>
</Page>

Controls/FlyoutControl/FlyoutDemo.xaml.cs

/*
* Flyout - 弹出框控件(继承自 FlyoutBase, 请参见 /Controls/FlyoutControl/FlyoutBaseDemo.xaml)
* Content - 获取或设置 Flyout 的内容
*/ using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Input; namespace Windows10.Controls.FlyoutControl
{
public sealed partial class FlyoutDemo : Page
{
public FlyoutDemo()
{
this.InitializeComponent();
} private void textBlock1_Tapped(object sender, TappedRoutedEventArgs e)
{
TextBlock flyoutContent = new TextBlock();
flyoutContent.Text = "我是 Flyout 中的内容"; Flyout flyout = new Flyout();
flyout.Placement = FlyoutPlacementMode.Right;
flyout.Content = flyoutContent; flyout.ShowAt(textBlock1);
}
}
}

3、MenuFlyout 的示例
Controls/FlyoutControl/MenuFlyoutDemo.xaml

<Page
x:Class="Windows10.Controls.FlyoutControl.MenuFlyoutDemo"
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"> <Page.Resources>
<!--
MenuFlyout - 菜单弹出框控件
Items - MenuFlyout 中包含的 item(MenuFlyoutItem, ToggleMenuFlyoutItem, MenuFlyoutSeparator)
-->
<MenuFlyout x:Key="MyMenuFlyout" Placement="Right"> <!--
MenuFlyoutItem - MenuFlyout 中的 item
Text, Click, Command, CommandParameter ToggleMenuFlyoutItem - MenuFlyout 中的可以 toggle 的 item
IsChecked, Text, Click, Command, CommandParameter MenuFlyoutSubItem - 支持 sub item 的 item
Text, Items MenuFlyoutSeparator - MenuFlyout 中的分隔符
--> <MenuFlyoutItem Name="menuFlyoutItem1" Text="MenuFlyoutItem" Click="menuFlyoutItem1_Click" />
<MenuFlyoutSeparator/>
<ToggleMenuFlyoutItem Name="toggleMenuFlyoutItem1" Text="ToggleMenuFlyoutItem1" IsChecked="False" Click="toggleMenuFlyoutItem1_Click" />
<ToggleMenuFlyoutItem Name="toggleMenuFlyoutItem2" Text="ToggleMenuFlyoutItem2" IsChecked="True" Click="toggleMenuFlyoutItem2_Click" /> <MenuFlyoutSubItem Text="item">
<MenuFlyoutItem Text="item 1" />
<MenuFlyoutItem Text="item 2" />
<MenuFlyoutSubItem Text="item 3">
<MenuFlyoutItem Text="item 3 - 1" />
<MenuFlyoutItem Text="item 3 - 2" />
</MenuFlyoutSubItem>
</MenuFlyoutSubItem> <!--
MenuFlyout.MenuFlyoutPresenterStyle - 用于定义 MenuFlyout 的样式
-->
<MenuFlyout.MenuFlyoutPresenterStyle>
<Style TargetType="MenuFlyoutPresenter">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="5" />
</Style>
</MenuFlyout.MenuFlyoutPresenterStyle>
</MenuFlyout> </Page.Resources> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="button1" Margin="5" Content="Options" Flyout="{StaticResource MyMenuFlyout}" /> <TextBlock Name="textBlock1" Margin="5 20 5 5" Text="按我弹出 Flyout" Tapped="textBlock1_Tapped" FontSize="18" /> </StackPanel>
</Grid>
</Page>

Controls/FlyoutControl/MenuFlyoutDemo.xaml.cs

/*
* MenuFlyout - 菜单弹出框控件(继承自 FlyoutBase, 请参见 /Controls/FlyoutControl/FlyoutBaseDemo.xaml)
* ShowAt(UIElement targetElement, Point point) - 在指定的 UIElement 的指定位置(point 是相对于 targetElement 的位置)显示 MenuFlyout 控件
*/ using Windows.Foundation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.Controls.FlyoutControl
{
public sealed partial class MenuFlyoutDemo : Page
{
public MenuFlyoutDemo()
{
this.InitializeComponent();
} private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = "MenuFlyoutItem 被 click 了";
} private void menuFlyoutItem1_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = "menuFlyoutItem1 被 click 了";
} private void toggleMenuFlyoutItem1_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = $"toggleMenuFlyoutItem1 被 click 了, IsChecked:{toggleMenuFlyoutItem1.IsChecked}";
} private void toggleMenuFlyoutItem2_Click(object sender, RoutedEventArgs e)
{
lblMsg.Text = $"toggleMenuFlyoutItem2 被 click 了, IsChecked:{toggleMenuFlyoutItem2.IsChecked}";
} private void textBlock1_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
MenuFlyout menuFlyout = this.Resources["MyMenuFlyout"] as MenuFlyout; // 对于基类的 ShowAt(FrameworkElement targetElement) 方法当然是支持的
// menuFlyout.ShowAt(textBlock1); // 在 MenuFlyout 中重载了 ShowAt() 方法,即 ShowAt(UIElement targetElement, Point point)
// 其中 point 代表 MenuFlyout 相对于 targetElement 左上角的显示位置(此时 MenuFlyout 的 Placement 参数就无效了)
menuFlyout.ShowAt(textBlock1, new Point(, ));
}
}
}

OK
[源码下载]

背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout的更多相关文章

  1. 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox

    [源码下载] 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(选择类) Sel ...

  2. 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton

    [源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...

  3. 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别

    [源码下载] 背水一战 Windows 10 (62) - 控件(媒体类): InkCanvas 保存和加载, 手写识别 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) ...

  4. 背水一战 Windows 10 (27) - 控件(文本类): TextBlock

    [源码下载] 背水一战 Windows 10 (27) - 控件(文本类): TextBlock 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBlock 示例 ...

  5. 背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView

    [源码下载] 背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView 作者:webabcd ...

  6. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

    [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) App ...

  7. 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画

    [源码下载] 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) Frame 动画 示例An ...

  8. 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker

    [源码下载] 背水一战 Windows 10 (44) - 控件(日期类): CalendarView, DatePicker, TimePicker 作者:webabcd 介绍背水一战 Window ...

  9. 背水一战 Windows 10 (59) - 控件(媒体类): Image, MediaElement

    [源码下载] 背水一战 Windows 10 (59) - 控件(媒体类): Image, MediaElement 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) Im ...

随机推荐

  1. 辛巴学院-Unity-剑英陪你零基础学c#系列(三)计算与类型

    辛巴学院:正大光明的不务正业. 中秋节快乐,每逢佳节倍思亲,尤其是那素未谋面的老婆,对吧,屌丝们.   今天我们来探索一下C#里面奇怪的计算,奇怪的类型. 奇怪的计算 当我刚刚接触计算机编程的时候,一 ...

  2. Mac 软件篇

    对于美好事务的追求无论何时都不算晚. ** 文章内容来着我整理的fetool,以下内容可能更新不及时 ** Mac 下的软件那么多,又是免费又是付费,应该怎么选呢?我来分享下我的推荐列表,推荐的优先级 ...

  3. jquery颜色选择器

    本站下载 第二种:纯JAVASCRIPT: <html> <head> <meta http-equiv="Content-Type" content ...

  4. ng2048源码阅读

    ng2048源码阅读 Tutorial: http://www.ng-newsletter.com/posts/building-2048-in-angularjs.html Github: http ...

  5. 《Qt Quick 4小时入门》学习笔记4

    http://edu.csdn.net/course/detail/1042/14806?auto_start=1 Qt Quick 4小时入门 第七章:处理鼠标与键盘事件 1.处理鼠标事件 鼠标信号 ...

  6. 查看Validate Subscription 的结果

    Sql Server Replication Monitor 提供一个feature,能够verify Replication的 Publication 和 Subscription 的数据同步sta ...

  7. ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务

    1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...

  8. Select count(*)和Count(1)的区别和执行方式

        在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理.   ...

  9. 前端MVVM框架设计及实现(二)

    在前端MVVM框架设计及实现(一)中有一个博友提出一个看法: “html中使用mvvm徒增开发成本” 我想这位朋友要表达的意思应该是HTML定义了大量的语法标记,HTML中放入了太多的逻辑,从而增加了 ...

  10. Java 超简单实现发送邮件(可动态控制发送人数)

    发送邮件的实现 需要事先引入以下几个架包,最重要的架包是jodd-3.7这个 以上架包下载地址:http://pan.baidu.com/s/1kVs7Tyv  提取密码:h22x 新建一个Util类 ...