Поворот изображения стиля в Windows Phone - PullRequest
0 голосов
/ 05 марта 2012

Ответ, который я нашел по адресу: Как повернуть изображение на определенный угол в приложении Windows Phone 7 Silverlight? близко к тому, что я ищу.

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

<Style x:Key="MyBoatPushPinStyle" TargetType="maps:Pushpin">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Image x:Name="MyBoatIcon" 
                       Source="Resources/Icons/myboat.png" 
                       Stretch="None">
                    <Image.RenderTransform>
                        <RotateTransform Angle="0" />
                    </Image.RenderTransform>
                </Image>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Стиль применяется к MapLayer:

<maps:MapLayer x:Name="LocationLayer">
    <maps:Pushpin Style="{StaticResource MyBoatPushPinStyle}"  
    Location="{Binding CurrentLocation}" />
</maps:MapLayer>

Я не могу понять, как ссылаться на изображение в стиле, если это действительно возможно сделать.

Что-то вроде:

((RotateTransform)REFERENCE_TO_IMAGE.RenderTransform).Angle = _currentTrack;

1 Ответ

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

Попробуйте это:

<maps:MapLayer x:Name="LocationLayer">
    <maps:Pushpin x:Name="PushpinLayer" Style="{StaticResource MyBoatPushPinStyle}" Location="{Binding CurrentLocation}" />
</maps:MapLayer>

Image a = FindFirstElementInVisualTree<Image>(PushpinLayer);
if (a != null)
    ((RotateTransform)a.RenderTransform).Angle = 90;

private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
    var count = VisualTreeHelper.GetChildrenCount(parentElement);
    if (count == 0)
        return null;

    for (int i = 0; i < count; i++)
    {
        var child = VisualTreeHelper.GetChild(parentElement, i);

        if (child != null && child is T)
            return (T)child;

        else
        {
            var result = FindFirstElementInVisualTree<T>(child);
            if (result != null)
                return result;

        }
    }
        return null;
}
...