为什么这在wpf
中运作良好<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Canvas x:Name="MyDesigner">
</Canvas>
</ScrollViewer>
现在,当我在silverlight中执行相同操作并加载“可以拖动”的控件时,滚动条不会被触发,当我拖出视图时,没有任何反应......但是在wpf中它会自动显示它们......
答案 0 :(得分:7)
快速检查普通的'gotcha'是否明确设置了画布高度/宽度属性?
如果我为测试目的敲了一些xaml并运行它:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Canvas x:Name="test" Background="Beige">
<TextBlock Canvas.Left="2000" Canvas.Top="200" Text="test"/>
</Canvas>
</ScrollViewer>
不会显示滚动条,即使我已经在画布2000中向左显式创建了内容,未设置画布宽度意味着滚动查看器没有要绑定的范围。没有宽度的画布被认为是我能看到的无限宽。虽然这与将当前视图之外的一段内容放在一起的概念不一样。
只要添加宽度,它就会定义一个有限区域来滚动并显示滚动条。
答案 1 :(得分:1)
这是我找到的解决方案。
画布可以动态增长,但您需要将高度显式设置为新值。
因此,如果您有20个高度为21的文本块,则需要将画布高度设置为:
Canvas.Height = 22.0 * 100
;
滚动查看器获取新的高度。
<强> MainPage.xaml中强>
<Canvas Canvas.Left="5" Canvas.Top="25" >
<ScrollViewer Width="300" Height="700" x:Name="CanSummaryScroller">
<Canvas x:Name="canSummaryCells" >
</Canvas>
</ScrollViewer>
</Canvas>
<强> MainPage.xaml.cs中强>
boxDevSumList是一个TextBoxes列表
for (int i = 0; i < 100; i++)
{
boxDevSumList.Add(new Cell());
(boxDevSumList.ElementAt(i)).Width = 271;
(boxDevSumList.ElementAt(i)).Height = 21;
(boxDevSumList.ElementAt(i)).SetValue(FontFamilyProperty, new FontFamily("Calibri"));
(boxDevSumList.ElementAt(i)).FontSize = 12;
(boxDevSumList.ElementAt(i)).Text = "this is a test";
if (i.Equals(1) || i.Equals(3) || i.Equals(5) || i.Equals(7) || i.Equals(9))
(boxDevSumList.ElementAt(i)).Background = lgBrush;
(boxDevSumList.ElementAt(i)).Opacity = .9;
canSummaryCells.Children.Add(boxDevSumList.ElementAt(i));
boxDevSumList.ElementAt(i).SetValue(Canvas.TopProperty, (double)(i * 21) + 45);
boxDevSumList.ElementAt(i).SetValue(Canvas.LeftProperty, 4.0);
canSummaryCells.Height = 22.0 * 100;
}