Контекстное меню Silverlight 4 и ScaleTransform

#silverlight #xaml #silverlight-4.0 #contextmenu #silverlight-toolkit

#silverlight #xaml #silverlight-4.0 #контекстное меню #silverlight-инструментарий

Вопрос:

Контекстное меню, предоставляемое Silverlight 4 Toolkit, отлично работало, пока я не внедрил <RenderTransform > тег в свой XAML, чтобы приложение Silverlight масштабировалось так, чтобы оно соответствовало всему окну браузера (следуя этому небольшому руководству)

Когда все работало отлично, до начала руководства мой XAML выглядел как:

 <UserControl>
    <Grid>
        <!-- Rest of app here... -->
    </Grid>
</UserControl>
  

Теперь мое приложение выглядит следующим образом:

 <UserControl>
    <Canvas>
        <Canvas.RenderTransform>
            <ScaleTransform [vars]></ScaleTransform>
        </Canvas.RenderTransform>
        <Grid>
            <!-- Rest of app here... -->
        </Grid>
    </Canvas>
</UserControl>
  

Масштабирование работает отлично, но теперь, когда я щелкаю правой кнопкой мыши, контекстное меню отображается не там, где должно (под мышью). Вместо этого он отображается в той же позиции x, что и мышь, но в самом верху приложения. Он также очень глючный, мне приходится постоянно щелкать по нему, чтобы убрать, и я не могу щелкнуть правой кнопкой мыши где-нибудь еще, чтобы снова вызвать его, и он не масштабируется вместе с остальным приложением.

Что может быть причиной этого? Есть ли правильный способ исправить это, или я должен просто применить смещение к меню, чтобы переместить его на мышь?

Ответ №1:

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

Комментарии:

1. @Jesse — Я еще не проверял ваш код, но если ваше масштабное преобразование является x * 2 и y * 3 , я думаю, вам нужно будет масштабировать координаты мыши на x / 2 и y / 3 .