不固定宽高的情况下如何给Canvas加入滚动条?

sftl25789 2010-07-19 06:11:59

如下这个MainPage.xaml页面上,rootGrid在最外层自动适应浏览器的宽高。里面的子控件大多数都是自定适应父控件的宽高。

整体的布局是让所有的控件能随着浏览器窗口的变化而变化的,但是其中Canvas111是用来呈现一些由程序生成的用户控件,这些动态加载进来的控件尺寸不一,有的过大的控件就

会超出Canvas111的范围,我想加载一个滚动条控件,来显示那些被隐藏的部分。请问这个该怎么加呢?

还有就是那些动态加载进来的控件是能拖动的,如果把控件拖出Canvas111的范围能不能也显示滚动条呢?

我从网上看到过很多的例子,但是都不能解决这个问题。请高手帮帮忙!

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="mySilverlight.MainPage"
>
<Grid x:Name="rootGrid" Background="#dfe8f6">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="35"></RowDefinition>
</Grid.RowDefinitions>

<!--头部-->
<Grid Height="36" Background="#1C3C77">
<ToggleButton Width="30" Height="30" HorizontalAlignment="Right" Click="FullShow" Margin="0,0,10,0" VerticalAlignment="Center"/>
</Grid>

<!--中间-->
<Border Grid.Row="1" BorderBrush="#99bbe8" BorderThickness="1" Margin="5,5,5,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<!--课程标题-->
<Grid>
<TextBlock FontSize="15" Margin="10,0,0,0"/>
</Grid>

<!--控件部分-->
<Canvas x:Name="Canvas111" Grid.Row="1"/>
</Grid>
</Border>


<!--底部-->
<Border BorderBrush="#99bbe8" BorderThickness="1" Grid.Row="2" Margin="5,3,5,0">
<Grid>
<StackPanel Orientation="Horizontal">
<Image Source="images/1.png" Width="26" Height="26" Stretch="Uniform" Cursor="Hand" Margin="3,0"/>
<Image Source="images/2.png" Width="26" Height="26" Stretch="Uniform" Cursor="Hand" Margin="3,0"/>
</StackPanel>
</Grid>
</Border>

</Grid>

</UserControl>
...全文
477 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WAI_WW_520 2011-06-09
  • 打赏
  • 举报
回复
Up Up
Sunpire 2010-07-19
  • 打赏
  • 举报
回复
1. 是不是非得要用 Canvas 啊? Canvas 是固定大小的,只能由代码来改变大小。
2. <!--控件部分-->
<Canvas x:Name="Canvas111" Grid.Row="1"/>
在这外面套一个 ScrollViewer
<ScrollViewer Grid.Row="1"/>
<Canvas x:Name="Canvas111" />
</ScrollViewer>

这应当是最简单的解决方法吧,Canvas111 的长、宽超出 ScrollViewer 的显示范围时,会自动出现滚动条,注意只能由代码来改变Canvas111的大小。

3. 高级方法: 自定义一个面板,从 Panel 派生出一个 Templated Control, 加上水平滚动条、竖直滚动条这两个部件,在滚动时显示被裁剪的Clip区域。
healer_kx 2010-07-19
  • 打赏
  • 举报
回复
没明白lz的具体的意思,能不能把问题化成小问题,再让我们明白一下。

8,737

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧