背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation
2021-05-12 19:27
                         标签:linq   template   返回   之一   fonts   one   complete   height   string    [源码下载] 作者:webabcd 示例 Controls/CollectionControl/SemanticZoomDemo/SemanticZoomDemo.xaml.cs Controls/CollectionControl/SemanticZoomDemo/ISemanticZoomInformationDemo.xaml Controls/CollectionControl/SemanticZoomDemo/ISemanticZoomInformationDemo.xaml.cs OK 背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation 标签:linq   template   返回   之一   fonts   one   complete   height   string    原文地址:http://www.cnblogs.com/lonelyxmas/p/7568302.html
介绍
背水一战 Windows 10 之 控件(集合类)
1、SemanticZoom 的示例
Controls/CollectionControl/SemanticZoomDemo/SemanticZoomDemo.xamlPage
    x:Class="Windows10.Controls.CollectionControl.SemanticZoomDemo.SemanticZoomDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.CollectionControl.SemanticZoomDemo"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    
    xmlns:common="using:Windows10.Common">
    Grid Background="Transparent">
        StackPanel Orientation="Horizontal" Margin="5" VerticalAlignment="Top">
            Button Name="btnToggleActiveView" Content="ToggleActiveView" Click="btnToggleActiveView_Click" />
            TextBlock Name="lblMsg" Margin="10 0 0 0" />
        StackPanel>
        
        
        SemanticZoom Name="semanticZoom" Margin="5 50 5 5" 
                      ScrollViewer.ZoomMode="Enabled"
                      IsZoomOutButtonEnabled="True" IsZoomedInViewActive="False" CanChangeViews="True">
            
            SemanticZoom.ZoomedInView>
                GridView x:Name="gridViewDetails" Margin="5" ItemsSource="{x:Bind MyData.View}">
                    GridView.ItemTemplate>
                        DataTemplate x:DataType="common:NavigationModel">
                            Grid Width="120" Background="Orange">
                                TextBlock TextWrapping="Wrap" Text="{x:Bind Title}" />
                            Grid>
                        DataTemplate>
                    GridView.ItemTemplate>
                    GridView.GroupStyle>
                        GroupStyle>
                            GroupStyle.HeaderTemplate>
                                DataTemplate x:DataType="common:NavigationModel">
                                    TextBlock Text="{x:Bind Title}" />
                                DataTemplate>
                            GroupStyle.HeaderTemplate>
                        GroupStyle>
                    GridView.GroupStyle>
                GridView>
            SemanticZoom.ZoomedInView>
            SemanticZoom.ZoomedOutView>
                GridView x:Name="gridViewSummary" Margin="5" ItemsSource="{x:Bind MyData.View.CollectionGroups}">
                    GridView.ItemTemplate>
                        DataTemplate>
                            Grid Background="Orange" Width="100" Height="100">
                                
                                TextBlock TextWrapping="Wrap" Text="{Binding Group.Title}" />
                            Grid>
                        DataTemplate>
                    GridView.ItemTemplate>
                GridView>
            SemanticZoom.ZoomedOutView>
            
        SemanticZoom>
    Grid>
Page>
/*
 * SemanticZoom - SemanticZoom 控件(继承自 Control, 请参见 /Controls/BaseControl/ControlDemo/)
 *     ToggleActiveView() - 在 ZoomedInView, ZoomedOutView 两个视图之间切换
 *     ViewChangeStarted - 视图切换开始时触发的事件 
 *     ViewChangeCompleted - 视图切换完成时触发的事件
 *     
 * 
 * CollectionViewSource - 对集合数据启用分组支持
 *     Source - 数据源
 *     View - 获取视图对象,返回一个实现了 ICollectionView 接口的对象
 *     IsSourceGrouped - 数据源是否是一个被分组的数据
 *     ItemsPath - 数据源中,子数据集合的属性名称
 *     
 * ICollectionView - 支持数据分组是 ICollectionView 的作用之一
 *     CollectionGroups - 组数据集合
 */
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
using Windows10.Common;
namespace Windows10.Controls.CollectionControl.SemanticZoomDemo
{
    public sealed partial class SemanticZoomDemo : Page
    {
        public CollectionViewSource MyData
        {
            get
            {
                XElement root = XElement.Load("SiteMap.xml");
                var items = LoadData(root);
                // 构造数据源
                CollectionViewSource source = new CollectionViewSource();
                source.IsSourceGrouped = true;
                source.Source = items;
                source.ItemsPath = new PropertyPath("Items");
                return source;
            }
        }
        public SemanticZoomDemo()
        {
            this.InitializeComponent();
        }
        private void btnToggleActiveView_Click(object sender, RoutedEventArgs e)
        {
            semanticZoom.ToggleActiveView();
        }
        // 解析 xml 数据
        private List
2、ISemanticZoomInformation 的示例
Controls/CollectionControl/SemanticZoomDemo/MyFlipView.cs/*
 * 开发一个实现了 ISemanticZoomInformation 接口的自定义 FlipView
 * 由于本例仅用于 SemanticZoom 中 ZoomedInView 的演示,所以并没有实现 ISemanticZoomInformation 的全部逻辑
 * 两个 ISemanticZoomInformation 对象之间交互的核心逻辑就是通过 SemanticZoomLocation source 获取数据,通过 SemanticZoomLocation destination 设置数据
 * 
 * 
 * ISemanticZoomInformation - 用于 SemanticZoom 的 ZoomedInView 和 ZoomedOutView(说明详见本例中的注释)
 * SemanticZoomLocation - 用于设置或获取 ISemanticZoomInformation 在 SemanticZoom 中的状态(说明详见本例中的注释)
 */
using Windows.UI.Xaml.Controls;
using Windows10.Common;
namespace Windows10.Controls.CollectionControl.SemanticZoomDemo
{
    public class MyFlipView : FlipView, ISemanticZoomInformation
    {
        public MyFlipView()
            : base()
        {
        }
        /// 
Page
    x:Class="Windows10.Controls.CollectionControl.SemanticZoomDemo.ISemanticZoomInformationDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.CollectionControl.SemanticZoomDemo"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    Grid Background="Transparent">
        Button Name="btnDisplayZoomedOutView" Content="切换至 ZoomedInView 视图" Click="btnDisplayZoomedOutView_Click" VerticalAlignment="Top" Margin="10 0 10 10" />
        
        SemanticZoom x:Name="semanticZoom" IsZoomedInViewActive="False" Margin="10 50 10 10">
            SemanticZoom.ZoomedInView>
                local:MyFlipView Name="flipView" Width="600" Height="300" HorizontalAlignment="Left" VerticalAlignment="Top">
                    FlipView.ItemTemplate>
                        DataTemplate>
                            TextBlock Text="{Binding Title}" FontSize="32" />
                        DataTemplate>
                    FlipView.ItemTemplate>
                    FlipView.ItemContainerStyle>
                        Style TargetType="FlipViewItem">
                            Setter Property="Background" Value="Blue" />
                        Style>
                    FlipView.ItemContainerStyle>
                local:MyFlipView>
            SemanticZoom.ZoomedInView>
            SemanticZoom.ZoomedOutView>
                GridView Name="gridView">
                    GridView.ItemTemplate>
                        DataTemplate>
                            Grid Background="Orange" Width="100" Height="100">
                                TextBlock TextWrapping="Wrap" Text="{Binding Title}" />
                            Grid>
                        DataTemplate>
                    GridView.ItemTemplate>
                GridView>
            SemanticZoom.ZoomedOutView>
            
        SemanticZoom>
        
    Grid>
Page>
/*
 * 演示 SemanticZoom 如何与自定义的 ISemanticZoomInformation 类结合使用(本例开发了一个实现了 ISemanticZoomInformation 接口的自定义 FlipView,参见 MyFlipView.cs)
 * ZoomedInView 用自定义的 FlipView 演示,ZoomedOutView 用 GridView 演示
 * 
 * 
 * 注:
 * ListViewBase 实现了 ISemanticZoomInformation 接口,所以可以在 SemanticZoom 的两个视图间有关联地切换。如果想让其它控件也实现类似的功能,就必须使其实现 ISemanticZoomInformation 接口
 */
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Windows.UI.Xaml.Controls;
using Windows10.Common;
namespace Windows10.Controls.CollectionControl.SemanticZoomDemo
{
    public sealed partial class ISemanticZoomInformationDemo : Page
    {
        public ISemanticZoomInformationDemo()
        {
            this.InitializeComponent();
            XElement root = XElement.Load("SiteMap.xml");
            var items = LoadData(root);
            // 绑定数据
            gridView.ItemsSource = items;
        }
        // 获取数据
        private List
[源码下载]
文章标题:背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation
文章链接:http://soscw.com/index.php/essay/84820.html