Scrollviewer上的Silverlight Canvas不会触发

时间:2009-06-27 07:07:45

标签: wpf silverlight

为什么这在wpf

中运作良好
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Canvas x:Name="MyDesigner">
</Canvas>
</ScrollViewer>

现在,当我在silverlight中执行相同操作并加载“可以拖动”的控件时,滚动条不会被触发,当我拖出视图时,没有任何反应......但是在wpf中它会自动显示它们......

2 个答案:

答案 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;
}
相关问题