zoukankan      html  css  js  c++  java
  • 手把手教你:亲手打造Silverlight的Win8 Metro外观(2) 菜单

    经过上一篇的分析,现在开始动手!

    首先来看一下. 我们的菜单他的表现形式是如何的.

    比如说我们现在有一个数据库叫  lonix_gls_2  有一个表menu (菜单)

    id 为主键,  fore_id 为上级id  , name 为菜单名 , Code为菜单所对面的xaml文件名

    菜单为树形结构.数据如下,  红色为 主菜单

    T-SQL 代码
     1 SET ANSI_NULLS ON
     2 GO
     3 SET QUOTED_IDENTIFIER ON
     4 GO
     5 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[menu]') AND type in (N'U'))
     6 BEGIN
     7 CREATE TABLE [dbo].[menu](
     8     [id] [int] IDENTITY(1,1) NOT NULL,
     9     [name] [nvarchar](10) NULL,
    10     [foreid] [int] NULL,
    11 PRIMARY KEY CLUSTERED 
    12 (
    13     [id] ASC
    14 )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    15 ) ON [PRIMARY]
    16 END


    我们用RIA SERVICE 所查出来的代码结构应该如下

     1 new List<TestModel> 
     2             {
     3                 new TestModel {
     4                     Name = "编码设置",
     5                     Children = new List<TestModel> { 
     6                         new TestModel { Name = "00101", Code="Test" } ,
     7                         new TestModel { Name = "00102", Code="Test1" } ,
     8                         new TestModel { Name = "00103"  } 
     9                     } 
    10                 },
    11                 new TestModel {
    12                     Name = "系统设置",
    13                     Children = new List<TestModel> { 
    14                         new TestModel { Name = "00201" } 
    15                     }
    16                 },
    17             };


    以上为测试数据..

    打开VS  新建三个模版控件!

    新建的类默认从  Control  继承. 我们需要手动将其改为从 ItemsControl继承..

    总共新建 

    Desktop(继承ItemsControl[主菜单容器])  以作用于包含任意项的 DesktopGroup

    DesktopGroup(继承ItemsControl[分组菜单容器])  以作用于包含任意项的 DesktopItem

    DesktopItem(继承ContentControl[子主菜单项])

    一. Desktop  主菜单容器

    1. 使desktop 中的子项 横向自动布局, 因此我们将他的ItemsPanel 设为StackPanle

    2. 使循环绑定子项

    3. 容器的布局

    代码如下:

     1     <Style TargetType="local:Desktop">
     2         <Setter Property="ItemsPanel">
     3             <Setter.Value>
     4                 <ItemsPanelTemplate>
     5                     <StackPanel x:Name="DesktopRootPanel" Orientation="Horizontal" Background="{x:Null}">
     6                     </StackPanel>
     7                 </ItemsPanelTemplate>
     8             </Setter.Value>
     9         </Setter>
    10         <Setter Property="ItemTemplate">
    11             <Setter.Value>
    12                 <common:HierarchicalDataTemplate>
    13                     <local:DesktopGroup ItemsSource="{Binding Path=Children}" />
    14                 </common:HierarchicalDataTemplate>
    15             </Setter.Value>
    16         </Setter>
    17         <Setter Property="Template">
    18             <Setter.Value>
    19                 <ControlTemplate TargetType="local:Desktop">
    20                     <Grid>
    21                         <Border Background="White" Opacity="0.1">
    22                         </Border>
    23                         <Border Margin="50,0,50,0">
    24                             <ItemsPresenter />
    25                         </Border>
    26                     </Grid>
    27                 </ControlTemplate>
    28             </Setter.Value>
    29         </Setter>
    30     </Style>

    local 命名空间为 当前项目

    xmlns:local="clr-namespace:当前项目"

    common 命名空间为

    xmlns:common="clr-namespace:System.Windows;assembly=System.Windows.Controls"

    Desktop 数据绑循环为 DesktopGroup

    二. DesktopGroup子菜单容器

    同Desktop 基本相同

     1   <Style TargetType="local:DesktopGroup">
     2         <Setter Property="ItemsPanel">
     3             <Setter.Value>
     4                 <ItemsPanelTemplate>
     5                     <tlk:WrapPanel  x:Name="DesktopGroupRootPanel" Orientation="Vertical" />
     6                 </ItemsPanelTemplate>
     7             </Setter.Value>
     8         </Setter>
     9         <Setter Property="ItemTemplate">
    10             <Setter.Value>
    11                 <common:HierarchicalDataTemplate>
    12                     <local:DesktopItem />
    13                 </common:HierarchicalDataTemplate>
    14             </Setter.Value>
    15         </Setter>
    16         <Setter Property="Template">
    17             <Setter.Value>
    18                 <ControlTemplate TargetType="local:DesktopGroup">
    19                     <Grid Margin="0,0,50,0" Height="Auto">
    20                         <Grid.RowDefinitions>
    21                             <RowDefinition Height="Auto" />
    22                             <RowDefinition Height="*" />
    23                         </Grid.RowDefinitions>
    24                         <TextBlock Text="{Binding Name}" Grid.Row="0" FontSize="15" FontWeight="Black" />
    25                         <Border Grid.Row="1"  Background="{TemplateBinding Background}"
    26                             BorderBrush="{TemplateBinding BorderBrush}"
    27                             BorderThickness="{TemplateBinding BorderThickness}" >
    28                             <Border.Effect>
    29                                 <BlurEffect Radius="5" />
    30                             </Border.Effect>
    31                         </Border>
    32                         <ItemsPresenter Margin="2" Grid.Row="1" />
    33                     </Grid>
    34                 </ControlTemplate>
    35             </Setter.Value>
    36         </Setter>
    37     </Style>

    DesktopGroup 数据绑定循环为 DesktopItem

    DesktopItem相比这二个之下可能有点繁琐,因此放在下一篇来制作

    如须转载请说明出处
    多抽出一分钟时间学习,让你的生命更加精彩,敢想敢做,努力做最好!

    博客园: JonneyDong 地址:http://www.cnblogs.com/jonneydong/
  • 相关阅读:
    Django环境配置
    python pip使用报错: Fatal error in launcher: Unable to create process using '"c:python27python.exe" "C:Python27Scriptspip.exe" '
    我的第100篇博客
    测试代码(测试函数)
    python 存储数据
    python 异常之进阶操作
    从实战的角度谈微服务(三):基于Feign的熔断
    从实战的角度谈微服务(三):基于Feign服务间的调用
    从实战的角度谈微服务(二):服务注册与发现(Eureka服务端)
    从实战的角度谈微服务(一):初识微服务
  • 原文地址:https://www.cnblogs.com/jonneydong/p/2447186.html
Copyright © 2011-2022 走看看