Silverlight玩转控件(四)——Grid布局

在这一节,我主要来介绍Silverlight的Grid布局。

先来让我们复习一下HTML的Table布局。

在这里这么说:Table布局只是为了为Grid来做个铺垫。因为我们知道,Table是为了容纳数据,而CSS才是我们布局的首选。

先不管这些,我们看下我们用Table是如何布局的。

<table border="1">
    <tr>
        <td>111</td>
        <td>222</td>
        <td>333</td>
    </tr>
    <tr>
        <td>444</td>
        <td>555</td>
        <td>666</td>
    </tr>
</table>

 

效果如下:

image

当我们用Silverlight的Grid进行布局的时候,也是一样的道理。我们一样需要制定Grid的行和列,不同的是,Grid是先指定,后使用。而Table是边指定,边使用。让我们来看一个使用Grid的例子,使其达到与我们Table布局同样的效果:

<Grid x:Name="grdLayoutRoot" Background="White" Width="400" Height="300" ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <TextBlock Text="111" Grid.Row="0" Grid.Column="0"></TextBlock>
    <TextBlock Text="222" Grid.Row="0" Grid.Column="1"></TextBlock>
    <TextBlock Text="333" Grid.Row="0" Grid.Column="2"></TextBlock>
    <TextBlock Text="444" Grid.Row="1" Grid.Column="0"></TextBlock>
    <TextBlock Text="555" Grid.Row="1" Grid.Column="1"></TextBlock>
    <TextBlock Text="666" Grid.Row="1" Grid.Column="2"></TextBlock>
</Grid>

看Grid中几个重要的属性:

1. RowDefinitions 和 ColumnDefinitions :这两个属性主要是来指定Grid控件的行数和列数,内部嵌套几个Definition,那么就代表这个Grid有几行几列。

2. ShowGridLines : 很明显,就是指定我们的Grid控件行列之间是否显示分割线,与Table中的Border属性非常类似。

3. 当我们使用其他控件内置于Grid中时,我们需要使用Grid.Row和Grid.Column来指定他所位于的所在行和所在列。

其效果如下:

image

当然,我们还可以指定这些行和列的宽度。(如果默认情况下则默认的是每行,每类的宽度,高度都相等):

<Grid.RowDefinitions>
    <RowDefinition Height="40"></RowDefinition>
    <RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="40"></ColumnDefinition>
    <ColumnDefinition></ColumnDefinition>
    <ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>

 

产生效果如下:

image

继续于Table做类比,在Table布局中,我们可以指定width的百分比。当然,在Grid中,我们一样可以实现这样的功能,方法是用*去代替了%,我们看下:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="40*"></ColumnDefinition>
    <ColumnDefinition Width="50*"></ColumnDefinition>
    <ColumnDefinition Width="30*"></ColumnDefinition>
    <ColumnDefinition Width="20*"></ColumnDefinition>
</Grid.ColumnDefinitions>

效果如下:

image

这个时候,我们可以很清楚地看到列的比例为40:50:30:20

这个相对于Table来说,更多了一分灵活性,因为在Table中,我们只能使用百分比的布局方式,而这个相对来说更加灵活。

在Grid中,我们还可以使用auto来作为宽度和高度的属性,这种情况下,Grid的宽度和高度便随着内部内容的大小而自动发生改变:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="auto"></ColumnDefinition>
    <ColumnDefinition Width="auto"></ColumnDefinition>
    <ColumnDefinition Width="auto"></ColumnDefinition>
    <ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>

我们还可以为宽度为自动的情况下指定最大和最小的宽度(或高度)。

<Grid.ColumnDefinitions>
    <ColumnDefinition MinWidth="30" MaxWidth="150"></ColumnDefinition>
    <ColumnDefinition Width="Auto" MinWidth="30" MaxWidth="150"></ColumnDefinition>
    <ColumnDefinition Width="Auto" MinWidth="30" MaxWidth="150"></ColumnDefinition>
    <ColumnDefinition Width="Auto" MinWidth="30" MaxWidth="150"></ColumnDefinition>
</Grid.ColumnDefinitions>

 

另外,如果我们实现这样一种情况,就是说要求一个控件跨越两个列,如下图所示:

image

看代码:

<Button Grid.ColumnSpan="2" Grid.RowSpan="2" x:Name="btnTest" Width="50" Height="30" Content="Text" Grid.Row="0" Grid.Column="0"></Button>

 

里面的关键代码:Grid.RowSpan=”2”。我也不多解释了,就是跨越两行。

好,总结下,Grid是一个很常用的布局控件。他提供了仿照HTML中Table的方式,分行,列来进行布局。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinUI 控件、UWP 控件、WPF 控件Silverlight 控件在语法和结构上有所不同,因此可以通过检查 XAML 代码的命名空间来区分它们。以下是一些常见的命名空间和控件: - WinUI 控件:命名空间为 `http://schemas.microsoft.com/winui/2021/xaml/behaviors` 或 `http://schemas.microsoft.com/winui/2021/xaml/presentation`,控件名称以 `Microsoft.UI` 开头。 - UWP 控件:命名空间为 `http://schemas.microsoft.com/winfx/2006/xaml/presentation` 或 `http://schemas.microsoft.com/winfx/2008/xaml/presentation`,控件名称以 `Windows.UI` 开头。 - WPF 控件:命名空间为 `http://schemas.microsoft.com/winfx/2006/xaml/presentation` 或 `http://schemas.microsoft.com/netfx/2007/xaml/presentation`,控件名称以 `System.Windows` 或 `Microsoft.Windows` 开头。 - Silverlight 控件:命名空间为 `http://schemas.microsoft.com/winfx/2006/xaml/presentation` 或 `http://schemas.microsoft.com/client/2007`,控件名称以 `System.Windows.Controls` 或 `Microsoft.Windows.Controls` 开头。 可以通过读取 XAML 文件中的命名空间来确定使用的控件类型。例如,以下代码片段演示了如何读取 XAML 文件中的命名空间: ```csharp using System.Xml.Linq; // Load XAML file into an XDocument XDocument xdoc = XDocument.Load("MyXamlFile.xaml"); // Get the root element of the XAML file XElement root = xdoc.Root; // Get the default namespace of the XAML file XNamespace ns = root.GetDefaultNamespace(); // Check the namespace to determine the type of controls used in the XAML file if (ns.NamespaceName.StartsWith("http://schemas.microsoft.com/winui")) { // WinUI controls } else if (ns.NamespaceName.StartsWith("http://schemas.microsoft.com/winfx")) { // UWP or WPF controls } else if (ns.NamespaceName.StartsWith("http://schemas.microsoft.com/client")) { // Silverlight controls } else { // Unknown namespace } ``` 请注意,这只是一种简单的方法来区分不同类型的控件,实际上还需要考虑一些其他因素,例如控件的属性和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值