Silverlight 4.0 SL4 TransformToVisualic:“;值不在预期范围内。”;

Silverlight 4.0 SL4 TransformToVisualic:“;值不在预期范围内。”;,silverlight-4.0,transform,Silverlight 4.0,Transform,我有一个包含画布的ScrollViewer: <ScrollViewer x:Name="scrollViewer" Margin="0" Grid.RowSpan="2" > <i:Interaction.Triggers> <!-- stuff--> </i:Interaction.Triggers> <Border> <Canvas x:Name="MapCanvas" Background="{Binding

我有一个包含画布的ScrollViewer:

<ScrollViewer x:Name="scrollViewer" Margin="0" Grid.RowSpan="2" >
<i:Interaction.Triggers>
<!--    stuff-->
</i:Interaction.Triggers>
<Border>
    <Canvas x:Name="MapCanvas" Background="{Binding BackgroundColor}" Width="7200" Height="3200" >
        <Canvas.RenderTransform>
            <ScaleTransform />
        </Canvas.RenderTransform>
        <i:Interaction.Behaviors>
        <!--            stuff-->
        </i:Interaction.Behaviors>

        <i:Interaction.Triggers>
        <!--            stuff-->
        </i:Interaction.Triggers>
    </Canvas>
</Border>
如果您能提供任何有关导致这种情况的提示,我们将不胜感激。在联机帮助中,我找不到TransformToVisual可能引发哪些异常或为什么会引发这些异常的文档


更新:是否有办法测试scrollViewer和/或MapCanvas以确保TransformToVisual调用成功?

也许我完全错了,但我怀疑这可能是一个时间问题

如果我这样做

private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 0, 0, 20);
    timer.Tick += (s, e2) =>
    {
        var generalTransform = scrollViewer.TransformToVisual(MapCanvas);
        timer.Stop();
    };
    timer.Start();
}
错误不再发生


我猜这是因为控件没有在屏幕上“可视化”显示?

您只能在屏幕上可见并已布局好的元素上调用TransformToVisual,谢谢您的回复。在调用TransformToVisual之前,是否有任何方法可以测试元素是否已布局?您可以添加一个标志,该标志在scrollViewer的onload事件中设置为true,在unload事件中设置为false。然后在调用TransformToVisual之前测试该标志是否为true
private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 0, 0, 20);
    timer.Tick += (s, e2) =>
    {
        var generalTransform = scrollViewer.TransformToVisual(MapCanvas);
        timer.Stop();
    };
    timer.Start();
}