Silverlight布局与依赖属性、路由事件详解
立即解锁
发布时间: 2025-08-26 01:18:36 阅读量: 18 订阅数: 21 AIGC 

### Silverlight布局与依赖属性、路由事件详解
在开发Silverlight应用时,页面布局和属性事件处理是非常重要的方面。下面将详细介绍Silverlight中的布局模型以及依赖属性和路由事件的相关知识。
#### 1. 页面布局选择
在设计页面时,可调整大小的页面通常更具灵活性,适用于商业应用和传统用户界面且图形元素不太复杂的应用。而图形丰富的应用和游戏则可能需要更精确地控制页面内容,因此更倾向于使用固定大小的页面。
若要测试不同的布局方式,可使页面边界更明显。一种简单的方法是为顶级内容元素应用非白色背景,例如将`Grid`的`Background`属性设置为黄色。不过,不能直接在用户控件上设置`Background`属性,因为`UserControl`类未提供该属性。另一种选择是使用`Border`元素作为顶级元素,这样可以勾勒出页面区域。
除了上述基本布局选择,还有一些更专业的大小调整选项,包括可滚动界面、可缩放界面和全屏界面。
#### 2. 可滚动界面
在Silverlight中,滚动支持是将大量内容适配到有限空间的关键特性。要实现滚动支持,需要使用`ScrollViewer`内容控件,将需要滚动的内容包裹在其中。通常会用它来包裹布局容器。
以下是一个包含文本框和按钮的两列网格实现可滚动的示例代码:
```xml
<UserControl x:Class="Layout.Scrolling"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Margin="20">
<ScrollViewer Background="AliceBlue">
<Grid Margin="3,3,10,3">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
...
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Margin="3"
Height="Auto" VerticalAlignment="Center"></TextBox>
<Button Grid.Row="0" Grid.Column="1" Margin="3" Padding="2"
Content="Browse"></Button>
...
</Grid>
</ScrollViewer>
</UserControl>
```
当页面大小调整到足以容纳所有内容时,滚动条会变为禁用状态,但仍会可见。可以通过设置`VerticalScrollBarVisibility`属性来控制滚动条的显示行为,该属性接受`ScrollBarVisibility`枚举值。默认值`Visible`会使垂直滚动条始终显示;使用`Auto`时,滚动条会在需要时显示,不需要时隐藏;使用`Disabled`则滚动条不会显示。
另外,`Hidden`与`Disabled`类似但有细微差别。使用`Hidden`时,内容仍可滚动(例如可使用箭头键滚动),并且`ScrollViewer`中的内容布局方式不同。使用`Disabled`时,内容只能使用`ScrollViewer`本身的空间;而使用`Hidden`时,内容会认为有无限空间,可能会溢出到可滚动区域。
`ScrollViewer`也支持水平滚动,但`HorizontalScrollBarVisibility`属性默认值为`Hidden`。若要使用水平滚动,需将该属性值改为`Visible`或`Auto`。
#### 3. 可缩放界面
前面提到`Grid`可使用比例大小来确保元素占据所有可用空间,是构建可调整大小界面的好工具。但这种调整大小的行为并非总是合适的,因为改变控件尺寸会影响其容纳内容的量,还可能产生细微的布局变化。在图形丰富的应用中,可能需要更精确的控制来保持元素完美对齐,此时可使用缩放技术。
缩放本质上是调整控件的整个视觉外观,而不仅仅是其外部边界。无论缩放比例如何,控件能容纳的内容不变,只是外观不同,类似于改变缩放级别。
要使用缩放,需要使用变换。在Silverlight中,可使用`ScaleTransform`来改变页面的缩放比例。有两种使用`ScaleTransform`的方法:一种是手动处理`UserControl.SizeChanged`事件,检查页面当前大小,进行适当计算并手动创建`ScaleTransform`;另一种更简便的方法是使用Silverlight工具包中的`Viewbox`控件,它能完成相同任务且无需编写代码。
以下是使用`Viewbox`实现可缩放页面的示例代码:
```xml
<UserControl x:Class="Layout.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit=
"clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit">
<!-- This container is required for rescaling. -->
<toolkit:Viewbox>
<!-- This container is the layout root of your ordinary user interface.
Note that it uses a hard-coded size. -->
<Grid Background="White" Width="200" He
```
0
0
复制全文
相关推荐










