重新想象 Windows 8 Store Apps (7) - 控件之布局控件: Canvas, Grid, StackPanel, VirtualizingStackPanel, WrapGrid, VariableSizedWrapGrid

简介: 原文:重新想象 Windows 8 Store Apps (7) - 控件之布局控件: Canvas, Grid, StackPanel, VirtualizingStackPanel, WrapGrid, VariableSizedWrapGrid[源码下载] 重新想象 Windows 8 S...
原文: 重新想象 Windows 8 Store Apps (7) - 控件之布局控件: Canvas, Grid, StackPanel, VirtualizingStackPanel, WrapGrid, VariableSizedWrapGrid

[源码下载]


重新想象 Windows 8 Store Apps (7) - 控件之布局控件: Canvas, Grid, StackPanel, VirtualizingStackPanel, WrapGrid, VariableSizedWrapGrid



作者:webabcd


介绍
重新想象 Windows 8 Store Apps 之布局控件

  • Canvas - 绝对定位式布局
  • Grid - 网格式布局
  • StackPanel - 流式布局
  • VirtualizingStackPanel - 仅能用于 ItemsControl
  • WrapGrid - 仅能用于 ItemsControl
  • VariableSizedWrapGrid - 用于 Wrap 子元素集合



示例
1、Canvas 的 Demo
CanvasDemo.xaml

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

    <Grid Background="Transparent">
        <!--
            Canvas - 绝对定位式布局
                Canvas.Left - 与上一层 Canvas 的 Y轴 间的距离,左上角为原点
                Canvas.Top - 与上一层 Canvas 的 X轴 间的距离,左上角为原点
                Canvas.ZIndex - 用于设置任意控件的 z-index 值
        
            注:Canvas 基于坐标定位,其不会因为自身的大小而限制子元素的大小
        -->
        <Canvas HorizontalAlignment="Left" VerticalAlignment="Top" Background="Red" Width="100" Height="100" Margin="120 0 0 0">

            <Canvas Background="Green" Width="200" Height="200" Canvas.Left="120" Canvas.Top="120" >
                <TextBlock Text="TextBlock" Canvas.Top="20" />
            </Canvas>

        </Canvas>
    </Grid>
</Page>


2、Grid 的 Demo
GridDemo.xaml

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

    <Grid Background="Transparent">
        <!--
            Grid - 网格式布局
                Grid.RowDefinitions - 用于定义 Grid 中的行
                Grid.ColumnDefinitions - 用于定义 Grid 中的列
                Width - 宽度
                MinWidth - 最小宽度
                MaxWidth - 最大宽度
                Height - 高度
                MinHeight - 最小高度
                MaxHeight - 最大高度
                Grid.Row - 控件所在的 Grid 的行的索引
                Grid.Column - 控件所在的 Grid 的列的索引
                Grid.RowSpan - 合并行。 控件所在行,以及控件所在行之后的需要连续合并的行的总行数
                Grid.ColumnSpan - 合并列。 控件所在列,以及控件所在列之后的需要连续合并的列的总列数
                Canvas.ZIndex - 用于设置任意控件的 z-index 值
                        
            Width 和 Height 的可用值如下:
            1、Auto - 自动设置为一个合适的值。默认值
            2、Pixel - 像素值
            3、* - 比例值。如 * 就是全部,2* 和 8* 就是分别占 20% 和 80%
        -->
        <Grid Background="Blue" Width="300" Height="300" Canvas.ZIndex="100">
            <Grid.RowDefinitions>
                <RowDefinition Height="50" />
                <RowDefinition Height="3*" />
                <RowDefinition Height="7*" />
                <RowDefinition Height="*" MinHeight="50" MaxHeight="100" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <TextBox Grid.Row="0" Grid.Column="0" Background="red" Text="webabcd" />
            <TextBox Grid.Row="0" Grid.Column="1" Background="red" Text="webabcd" Grid.ColumnSpan="2" HorizontalAlignment="Center" />
            <TextBox Grid.Row="1" Grid.Column="0" Background="red" Text="webabcd" />
            <TextBox Grid.Row="1" Grid.Column="1" Background="red" Text="webabcd" Grid.ColumnSpan="2" HorizontalAlignment="Center" />
            <TextBox Grid.Row="2" Grid.Column="0" Background="red" Text="webabcd" />
            <TextBox Grid.Row="2" Grid.Column="1" Background="red" Text="webabcd" Grid.RowSpan="2" VerticalAlignment="Bottom" />
            <TextBox Grid.Row="2" Grid.Column="2" Background="red" Text="webabcd" />
            <TextBox Grid.Row="3" Grid.Column="2" Background="red" Text="webabcd" />
            <TextBox Grid.Row="4" Grid.Column="2" Background="red" Text="webabcd" />
        </Grid>

        
        <!--    
            Canvas.ZIndex - 用于设置任意控件的 z-index 值
        
            说明:
            1、Grid 的 HorizontalAlignment 属性和 VerticalAlignment 属性的默认值均是 Stretch
            2、在 Grid 内的所有子元素均需要通过 Margin 属性进行相对定位
        -->
        <Rectangle Margin="10 50 100 150" Fill="Green" Canvas.ZIndex="10" />
        
    </Grid>
</Page>


3、StackPanel 的 Demo
StackPanelDemo.xaml

<Page
    x:Class="XamlDemo.Controls.Layout.StackPanelDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Controls.Layout"
    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 HorizontalAlignment="Left" Margin="120 0 0 0">

            <!--
                StackPanel - 流式布局
                    Orientation - StackPanel 控件内对象的排列方向
                        Horizontal - 水平排列
                        Vertical - 垂直排列
            -->
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="a" Margin="5" />
                <TextBlock Text="b" Margin="5" />
                <TextBlock Text="c" Margin="5" />
            </StackPanel>

            <StackPanel Orientation="Vertical">
                <TextBlock Text="a" Margin="5" />
                <TextBlock Text="b" Margin="5" />
                <TextBlock Text="c" Margin="5" />
            </StackPanel>

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


4、VirtualizingStackPanel 的 Demo
VirtualizingStackPanelDemo.xaml

<Page
    x:Class="XamlDemo.Controls.Layout.VirtualizingStackPanelDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Controls.Layout"
    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="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667">
                <Run>仅能用于 ItemsControl</Run>
                <LineBreak />
                <Run>请参见 Controls/ListBoxDemo.xaml</Run>
            </TextBlock>

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


5、WrapGrid 的 Demo
WrapGridDemo.xaml

<Page
    x:Class="XamlDemo.Controls.Layout.WrapGridDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Controls.Layout"
    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="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667">
                <Run>仅能用于 ItemsControl</Run>
                <LineBreak />
                <Run>请参见 Controls/GridView/Demo.xaml</Run>
            </TextBlock>
            
        </StackPanel>
    </Grid>
</Page>


6、VariableSizedWrapGrid 的 Demo
VariableSizedWrapGridDemo.xaml

<Page
    x:Class="XamlDemo.Controls.Layout.VariableSizedWrapGridDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Controls.Layout"
    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="120 0 0 0">

            <TextBlock Name="lblMsg" FontSize="14.667">
                <Run>另请参见 Controls/GridView/VariableSized.xaml</Run>
            </TextBlock>

            <!--
                VariableSizedWrapGrid
                    1、用于 Wrap 子元素集合
                    2、关于 VariableSized 的功能详见 Controls/GridView/VariableSized.xaml
            -->
            <VariableSizedWrapGrid Orientation="Horizontal" HorizontalAlignment="Left" Background="Green" Width="1000" Margin="0 10 0 0">
                <VariableSizedWrapGrid.Children>
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                    <Image Source="/Assets/Logo.png" Width="100" Height="100" Margin="10" />
                </VariableSizedWrapGrid.Children>
            </VariableSizedWrapGrid>

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



OK
[源码下载]

目录
相关文章
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
138 0
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
10月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
160 11
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
133 2
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
114 2
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
209 1
|
PHP 开发工具 git
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
【Azure 应用服务】在 App Service for Windows 中自定义 PHP 版本的方法
118 1
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
114 0
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
109 0
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
113 0
|
应用服务中间件 nginx Windows
【Azure 应用服务】在App Service for Windows中实现反向代理
【Azure 应用服务】在App Service for Windows中实现反向代理
131 0

热门文章

最新文章