SL4 TransformToVisual: «Значение не попадает в ожидаемый диапазон». - PullRequest
5 голосов
/ 14 апреля 2011

У меня есть ScrollViewer, содержащий Canvas:

<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>

Этот код вызывает исключение: «Значение не попадает в ожидаемый диапазон».

var generalTransform = scrollViewer.TransformToVisual(MapCanvas);     

Любые намеки на причины этого будут оценены.Просматривая онлайн-справку, я не смог найти документацию о том, какие исключения может генерировать TransformToVisual и почему.

ОБНОВЛЕНИЕ: Есть ли способ протестировать scrollViewer и / или MapCanvas, чтобы убедиться, чтовызов TransformToVisual будет успешным?

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Может быть, я совершенно не прав, но я подозреваю, что это может быть проблема синхронизации.

Если я сделаю

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();
}

, ошибка больше не возникает ...

Полагаю, это потому, что элементы управления не были «визуально» отображены на экране?

0 голосов
/ 08 марта 2012

Вы можете вызвать TransformToVisual только для элемента, который виден на экране и уже выложен

...