ArcGis API FOR Silverlight 做了个导航工具~

原文 http://www.cnblogs.com/thinkaspx/archive/2012/08/08/2628214.html

ArcGis API FOR Silverlight 做了个导航工具~

转载请注明文章出处:http://www.cnblogs.com/thinkaspx

地图是读取的谷歌图层。。

主要是导航工具 做出来费劲呀。。

马上上代码

ArcGis API FOR Silverlight 做了个导航工具~
ArcGis API FOR Silverlight 做了个导航工具~
namespace ZoomwayWebGis.Controls.Generic
{
    [TemplatePart(Name = "PanLeft", Type = typeof(FrameworkElement))]
    [TemplatePart(Name = "PanRight", Type = typeof(FrameworkElement))]
    [TemplatePart(Name = "PanUp", Type = typeof(FrameworkElement))]
    [TemplatePart(Name = "PanDown", Type = typeof(FrameworkElement))]
    [TemplatePart(Name = "ZoomSlider", Type = typeof(Slider))]
    [TemplatePart(Name = "ZoomInButton", Type = typeof(Button))]
    [TemplatePart(Name = "ZoomOutButton", Type = typeof(Button))]
    [TemplatePart(Name = "InstanceMark", Type = typeof(Button))]
    public class MapNavigator : ContentControl
    {
        FrameworkElement PanLeft;
        FrameworkElement PanRight;
        FrameworkElement PanUp;
        FrameworkElement PanDown;
        Button ZoomInButton;
        Button ZoomOutButton;
        Slider ZoomSlider;

        private double _panFactor = 0.5;
        private const double MaxResolution = 23218.433769164774;
        private const double MinResolution = 0.59716428347743467;

        public MapNavigator()
        {
            this.DefaultStyleKey = typeof(MapNavigator);
        }

        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            PanLeft = GetTemplateChild("PanLeft") as FrameworkElement;
            PanRight = GetTemplateChild("PanRight") as FrameworkElement;
            PanUp = GetTemplateChild("PanUp") as FrameworkElement;
            PanDown = GetTemplateChild("PanDown") as FrameworkElement;
            ZoomSlider = GetTemplateChild("ZoomSlider") as Slider;
            ZoomInButton = GetTemplateChild("ZoomInButton") as Button;
            ZoomOutButton = GetTemplateChild("ZoomOutButton") as Button;

            enablePanElement(PanLeft);
            enablePanElement(PanRight);
            enablePanElement(PanUp);
            enablePanElement(PanDown);

            // Set control's flow direction to LTR to avoid flipping East and West keys:
            this.FlowDirection = System.Windows.FlowDirection.LeftToRight;

            if (ZoomSlider != null)
            {
                if (Map != null)
                {
                    SetupZoom();
                }

                ZoomSlider.Minimum = 0;
                ZoomSlider.Maximum = 1;
                ZoomSlider.SmallChange = .01;
                ZoomSlider.LargeChange = .1;
                ZoomSlider.LostMouseCapture += ZoomSlider_LostMouseCapture;
                ZoomSlider.LostFocus += ZoomSlider_LostMouseCapture;
            }
            if (ZoomInButton != null)
                ZoomInButton.Click += ZoomInButton_Click;
            if (ZoomOutButton != null)
                ZoomOutButton.Click += ZoomOutButton_Click;

            bool isDesignMode = System.ComponentModel.DesignerProperties.GetIsInDesignMode(this);
            if (isDesignMode)
                mouseOver = isDesignMode;
            ChangeVisualState(false);
        }

     
        private void ZoomOutButton_Click(object sender, RoutedEventArgs e)
        {
            Map.Zoom(1 / Map.ZoomFactor);
        }

        private void ZoomInButton_Click(object sender, RoutedEventArgs e)
        {
            Map.Zoom(Map.ZoomFactor);
        }

        private void Map_ExtentChanged(object sender, ExtentEventArgs args)
        {
            if (!double.IsNaN(Map.Resolution) && ZoomSlider != null)
                ZoomSlider.Value = ResolutionToValue(Map.Resolution);
        }

        #region State management

        private bool mouseOver = false;


        protected override void OnMouseLeave(MouseEventArgs e)
        {
            mouseOver = false;
            if (!trackingRotation)
                ChangeVisualState(true);
            base.OnMouseLeave(e);
        }


        protected override void OnMouseEnter(MouseEventArgs e)
        {
            mouseOver = true;
            ChangeVisualState(true);
            base.OnMouseEnter(e);
        }

        private void ChangeVisualState(bool useTransitions)
        {
            if (mouseOver)
            {
                GoToState(useTransitions, "MouseOver");
            }
            else
            {
                GoToState(useTransitions, "Normal");
            }
        }

        private bool GoToState(bool useTransitions, string stateName)
        {
            return VisualStateManager.GoToState(this, stateName, useTransitions);
        }

        #endregion

        #region Rotation

        Point startMousePos;
        private double angle = 0;
        private bool trackingRotation = false;

        private double GetAngle(Point a, Point b)
        {
            if (a == null || b == null) return 0;
            return Math.Atan2((b.X - a.X), (a.Y - b.Y)) / Math.PI * 180;
        }

        #endregion

        #region Zoom

        private void ZoomSlider_LostMouseCapture(object sender, EventArgs e)
        {
            Map.ZoomToResolution(ValueToResolution(ZoomSlider.Value));
        }

        #endregion

        private void enablePanElement(FrameworkElement element)
        {
            if (element == null) return;
            element.MouseLeave += panElement_MouseLeftButtonUp;
            element.MouseLeftButtonDown += panElement_MouseLeftButtonDown;
            element.MouseLeftButtonUp += panElement_MouseLeftButtonUp;
        }

        private void panElement_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (Map == null || sender == null) return;

            Envelope env = Map.Extent;
            if (env == null) return;
            double x = 0, y = 0;
            MapPoint oldCenter = env.GetCenter();
            MapPoint newCenter = null;
            var height = env.Height * _panFactor;
            var width = env.Width * _panFactor;
            // if units are degrees (the default), limit or alter panning to the lat/lon limits
            if (sender == PanUp) // North
            {
                y = oldCenter.Y + height;
                newCenter = new MapPoint(oldCenter.X, y);
            }
            else if (sender == PanRight) // East
            {
                x = oldCenter.X + width;
                newCenter = new MapPoint(x, oldCenter.Y);
            }
            else if (sender == PanLeft) // West
            {
                x = oldCenter.X - width;
                newCenter = new MapPoint(x, oldCenter.Y);
            }
            else if (sender == PanDown) // South
            {
                y = oldCenter.Y - height;
                newCenter = new MapPoint(oldCenter.X, y);
            }

            if (newCenter != null)
                Map.PanTo(newCenter);

        }

        private void panElement_MouseLeftButtonUp(object sender, MouseEventArgs e)
        {
            if (Map == null) return;
        }


        private double ValueToResolution(double value)
        {
            double max = Math.Log10(MaxResolution);
            double min = Math.Log10(MinResolution);
            double resLog = (1 - value) * (max - min) + min;
            return Math.Pow(10, resLog);
        }

        private double ResolutionToValue(double resolution)
        {
            double max = Math.Log10(MaxResolution);
            double min = Math.Log10(MinResolution);
            double value = 1 - ((Math.Log10(resolution) - min) / (max - min));
            return Math.Min(1, Math.Max(value, 0)); //cap values between 0..1
        }

        public void SetupZoom()
        {
            if (ZoomSlider != null && Map != null)
            {
                if (!double.IsNaN(MinResolution) && !double.IsNaN(MaxResolution) &&
                    MaxResolution != double.MaxValue &&
                    MinResolution != double.Epsilon &&
                    !double.IsNaN(Map.Resolution))
                {
                    ZoomSlider.Value = ResolutionToValue(Map.Resolution);
                }
            }
        }

        #region Properties

        public static readonly DependencyProperty MapProperty = DependencyProperty.Register("Map", typeof(Map), typeof(MapNavigator), new PropertyMetadata(OnMapPropertyChanged));

        private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            MapNavigator nav = d as MapNavigator;
            Map map = e.NewValue as Map;
            Map oldmap = e.OldValue as Map;

            if (oldmap != null)
            {
                oldmap.RotationChanged -= nav.Map_RotationChanged;
                oldmap.ExtentChanged -= nav.Map_ExtentChanged;
                oldmap.ExtentChanging -= nav.Map_ExtentChanged;
                if (oldmap.Layers != null)
                    oldmap.Layers.LayersInitialized -= nav.Layers_LayersInitialized;
            }
            if (map != null)
            {
                map.RotationChanged += nav.Map_RotationChanged;
                map.ExtentChanged += nav.Map_ExtentChanged;
                map.ExtentChanging += nav.Map_ExtentChanged;
                if (map.Layers != null)
                    map.Layers.LayersInitialized += nav.Layers_LayersInitialized;
                nav.SetupZoom();
            }
        }

        private void Layers_LayersInitialized(object sender, EventArgs args)
        {
            SetupZoom();
        }


        public Map Map
        {
            get { return GetValue(MapProperty) as Map; }
            set { SetValue(MapProperty, value); }
        }


        public Double PanFactor { get { return _panFactor; } set { _panFactor = value; } }

        private void Map_RotationChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            double value = (this.FlowDirection == System.Windows.FlowDirection.LeftToRight) ? (double)e.NewValue : -(double)e.NewValue;
            angle = (double)e.NewValue;
        }

        #endregion
    }
ArcGis API FOR Silverlight 做了个导航工具~

 

ArcGis API FOR Silverlight 做了个导航工具~
ArcGis API FOR Silverlight 做了个导航工具~
 <Style TargetType="nmap:MapNavigator">
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Background" Value="#F0999988" />
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate  TargetType="nmap:MapNavigator">
                    <Grid x:Name="NavigatorRootGrid" Background="Transparent" RenderTransformOrigin="0.5,0.5" Opacity="1">
                        <Grid.Resources>
                            <RadialGradientBrush x:Key="CircleButtonGradientBrush" GradientOrigin="0.25,0.25">
                                <GradientStop Offset="0.25" Color="#99CCCCCC"/>
                                <GradientStop Offset="1.00" Color="#99000000"/>
                            </RadialGradientBrush>

                            <SolidColorBrush x:Key="HoverShineBrush" Color="#749dd2" />
                            <DropShadowEffect x:Key="HoverShineEffect" Color="#749dd2" BlurRadius="20" ShadowDepth="0" />

                            <LinearGradientBrush x:Key="ThumbGradientBrush" EndPoint="0.5,0.95" StartPoint="0.5,0.05">
                                <GradientStop Color="#749dd2" Offset="0" />
                                <GradientStop Color="#749dd2" Offset="1" />
                            </LinearGradientBrush>

                            <LinearGradientBrush x:Key="ThumbPressedBrush" EndPoint="0.5,0.95" StartPoint="0.5,0.05">
                                <GradientStop Color="#99CCCCCC" Offset="0" />
                                <GradientStop Color="#99333333" Offset="1" />
                            </LinearGradientBrush>

                            <!--Circle Button Style-->
                            <Style TargetType="Button" x:Key="CircleButtonStyle" >
                                <Setter Property="Background" Value="#F0CCCCCC" />
                                <Setter Property="Foreground" Value="#FF000000" />
                                <Setter Property="BorderBrush" Value="#F0333333" />
                                <Setter Property="BorderThickness" Value="1" />
                                <Setter Property="Padding" Value="0"/>
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" TargetType="Button">
                                            <Grid x:Name="ButtonRootGrid" Background="Transparent">
                                                <VisualStateManager.VisualStateGroups>
                                                    <VisualStateGroup x:Name="CommonStates" >
                                                        <VisualState x:Name="Normal" />
                                                        <VisualState x:Name="MouseOver">
                                                            <Storyboard>
                                                                <DoubleAnimation Storyboard.TargetName="HoverShineShape" Storyboard.TargetProperty="Opacity" To="1.0" Duration="0:0:0.1" />
                                                            </Storyboard>
                                                        </VisualState>
                                                        <VisualState x:Name="Pressed" />
                                                        <VisualState x:Name="Disabled">
                                                            <Storyboard>
                                                                <DoubleAnimation Storyboard.TargetName="DisabledMask" Storyboard.TargetProperty="Opacity" To="0.7" Duration="0:0:0.1" />
                                                            </Storyboard>
                                                        </VisualState>
                                                    </VisualStateGroup>
                                                </VisualStateManager.VisualStateGroups>
                                                <Ellipse x:Name="BackgroundShape" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" 
                                            Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" 
                                            StrokeThickness="{TemplateBinding BorderThickness}"/>
                                                <Ellipse x:Name="HoverShineShape" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"
                                            Fill="{StaticResource HoverShineBrush}" Stroke="#00FFFFFF" StrokeThickness="0"
                                            Effect="{StaticResource HoverShineEffect}" Opacity="0.0" />
                                                <ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}"
                                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" />
                                                <Ellipse x:Name="DisabledMask" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"
                                            Fill="#F0999999" Stroke="#00FFFFFF" StrokeThickness="0" Opacity="0.0" IsHitTestVisible="false"/>
                                            </Grid>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>

                            <!-- Zoom Bar Thumb Style-->
                            <Style TargetType="Thumb" x:Key="ZoomBarThumbStyle">
                                <Setter Property="Background" Value="{StaticResource ThumbGradientBrush}" />
                                <Setter Property="BorderThickness" Value="1" />
                                <Setter Property="IsTabStop" Value="False" />
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="Thumb">
                                            <Grid x:Name="ThumbRootGrid" Background="Transparent">
                                                <VisualStateManager.VisualStateGroups>
                                                    <VisualStateGroup x:Name="CommonStates">
                                                        <VisualStateGroup.Transitions>
                                                            <VisualTransition GeneratedDuration="00:00:00.1" To="MouseOver" />
                                                            <VisualTransition GeneratedDuration="00:00:00.1" To="Pressed" />
                                                            <VisualTransition From="Normal" GeneratedDuration="00:00:00.25" To="MouseOver" />
                                                            <VisualTransition From="MouseOver" GeneratedDuration="00:00:00.25" To="Normal" />
                                                            <VisualTransition From="MouseOver" GeneratedDuration="00:00:00.25" To="Pressed" />
                                                            <VisualTransition From="Pressed" GeneratedDuration="00:00:00.25" To="MouseOver" />
                                                        </VisualStateGroup.Transitions>
                                                        <VisualState x:Name="Normal" />
                                                        <VisualState x:Name="MouseOver">
                                                            <Storyboard>
                                                                <DoubleAnimation Storyboard.TargetName="HoverShineBorder" Storyboard.TargetProperty="Opacity" To="1.0" Duration="0:0:0.1" />
                                                            </Storyboard>
                                                        </VisualState>
                                                        <VisualState x:Name="Pressed">
                                                            <Storyboard>
                                                                <DoubleAnimation Storyboard.TargetName="PressedBorder" Storyboard.TargetProperty="Opacity" To="1.0" Duration="0:0:0.1" />
                                                            </Storyboard>
                                                        </VisualState>
                                                        <VisualState x:Name="Disabled">
                                                            <Storyboard>
                                                                <DoubleAnimation Storyboard.TargetName="DisabledBorder" Storyboard.TargetProperty="Opacity" To="0.5" Duration="0:0:0.1" />
                                                            </Storyboard>
                                                        </VisualState>
                                                    </VisualStateGroup>
                                                </VisualStateManager.VisualStateGroups>
                                                <Border x:Name="BackgroundBorder" Background="{TemplateBinding Background}"
                                         BorderBrush="{TemplateBinding BorderBrush}" 
                                         BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" />
                                                <Border x:Name="HoverShineBorder" Background="{StaticResource HoverShineBrush}"
                                         BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
                                          CornerRadius="2" Opacity="0" />
                                                <Border x:Name="PressedBorder" Background="{StaticResource ThumbPressedBrush}"
                                         BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2" Opacity="0" />
                                                <Border x:Name="DisabledBorder" Background="#F0999999" IsHitTestVisible="false" CornerRadius="2" Opacity="0" />
                                            </Grid>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>

                            <!-- Zoom Slider Style-->
                            <Style TargetType="Slider" x:Key="ZoomSliderStyle">
                                <Setter Property="BorderThickness" Value="1" />
                                <Setter Property="BorderBrush" Value="#99666666" />
                                <Setter Property="Background" Value="Transparent" />
                                <Setter Property="Foreground" Value="#99666666" />
                                <Setter Property="IsTabStop" Value="False" />
                                <Setter Property="Maximum" Value="1" />
                                <Setter Property="Minimum" Value="0" />
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="Slider">
                                            <Grid x:Name="LayoutRoot" Background="Transparent">
                                                <Grid.Resources>
                                                    <ControlTemplate x:Key="RepeatButtonTemplate1">
                                                        <Grid x:Name="Root" Opacity="0" Background="Transparent" />
                                                    </ControlTemplate>
                                                    <ControlTemplate x:Key="RepeatButtonTemplate2">
                                                        <Grid x:Name="Root" Opacity="1" Background="{StaticResource HoverShineBrush}"  />
                                                    </ControlTemplate>
                                                </Grid.Resources>
                                                <VisualStateManager.VisualStateGroups>
                                                    <VisualStateGroup x:Name="CommonStates">
                                                        <VisualState x:Name="Normal" />
                                                        <VisualState x:Name="MouseOver" />
                                                        <VisualState x:Name="Disabled">
                                                            <Storyboard>
                                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="(UIElement.Opacity)">
                                                                    <SplineDoubleKeyFrame KeyTime="0" Value="0.5" />
                                                                </DoubleAnimationUsingKeyFrames>
                                                            </Storyboard>
                                                        </VisualState>
                                                    </VisualStateGroup>
                                                </VisualStateManager.VisualStateGroups>
                                                <Grid x:Name="HorizontalTemplate" Margin="0,0,0,0" Background="Transparent">
                                                    <Grid.ColumnDefinitions>
                                                        <ColumnDefinition Width="Auto" />
                                                        <ColumnDefinition Width="Auto" />
                                                        <ColumnDefinition Width="*" />
                                                    </Grid.ColumnDefinitions>
                                                    <Rectangle Margin="0,4,0,4" Grid.Column="0" Grid.ColumnSpan="3" Fill="{TemplateBinding Background}" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}" Opacity="0.8" RadiusX="2" RadiusY="2" />
                                                    <RepeatButton x:Name="HorizontalTrackLargeChangeDecreaseRepeatButton" Margin="0,4,0,4" IsTabStop="False" Template="{StaticResource RepeatButtonTemplate2}" Grid.Column="0" />
                                                    <RepeatButton x:Name="HorizontalTrackLargeChangeIncreaseRepeatButton" Margin="0,4,0,4" IsTabStop="False" Template="{StaticResource RepeatButtonTemplate1}" Grid.Column="2" />
                                                    <Thumb x:Name="HorizontalThumb" Height="{TemplateBinding Height}" Width="8" Grid.Column="1" IsTabStop="True" Style="{StaticResource ZoomBarThumbStyle}" />
                                                </Grid>
                                                <Grid x:Name="VerticalTemplate" Margin="0,0,0,0" Visibility="Collapsed" Background="Transparent">
                                                    <Grid.RowDefinitions>
                                                        <RowDefinition Height="*" />
                                                        <RowDefinition Height="Auto" />
                                                        <RowDefinition Height="Auto" />
                                                    </Grid.RowDefinitions>
                                                    <Rectangle Margin="4,0,4,0" Grid.Row="0" Grid.RowSpan="3" Fill="{TemplateBinding Background}"
                                             Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}" Opacity="0.8" RadiusX="2" RadiusY="2" />
                                                    <RepeatButton x:Name="VerticalTrackLargeChangeDecreaseRepeatButton" Margin="4,0,4,0" IsTabStop="False"
                                             Template="{StaticResource RepeatButtonTemplate2}" Grid.Row="2" />
                                                    <RepeatButton x:Name="VerticalTrackLargeChangeIncreaseRepeatButton" Margin="4,0,4,0" IsTabStop="False"
                                             Template="{StaticResource RepeatButtonTemplate1}" Grid.Row="0" BorderBrush="{StaticResource HoverShineBrush}" />
                                                    <Grid Margin="6,2,6,2" Grid.Row="0"
                                             Grid.RowSpan="3" HorizontalAlignment="Stretch"
                                              VerticalAlignment="Stretch" IsHitTestVisible="False"
                                               Background="#FFFBF9FA" >
                                                        <Grid.RowDefinitions>
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                            <RowDefinition Height="*" />
                                                        </Grid.RowDefinitions>
                                                        <Rectangle Grid.Row="0" Fill="{TemplateBinding Foreground}" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="1" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="2" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="3" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="4" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="5" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="6" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="7" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="8" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="9" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="10" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="11" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="12" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="13" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="14" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="15" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="16" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="17" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="18" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                        <Rectangle Grid.Row="19" Fill="{TemplateBinding Foreground}" Stroke="#F0FFFFFF" StrokeThickness="0" Margin="1" RadiusX="0" RadiusY="0" Height="1" />
                                                    </Grid>
                                                    <Thumb x:Name="VerticalThumb" 
                                                            Width="{TemplateBinding Width}" Grid.Row="1" Height="8" IsTabStop="True" 
                                                            Style="{StaticResource ZoomBarThumbStyle}" >
                                                        <Thumb.BorderBrush>
                                                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                                                <GradientStop Color="#FFA3AEB9" Offset="0"/>
                                                                <GradientStop Color="#FF8399A9" Offset="0.375"/>
                                                                <GradientStop Color="#FF718597" Offset="0.375"/>
                                                                <GradientStop Color="#FF6C84A4" Offset="1"/>
                                                            </LinearGradientBrush>
                                                        </Thumb.BorderBrush>
                                                        <Thumb.Background>
                                                            <RadialGradientBrush>
                                                                <GradientStop Color="#FF749DD2" Offset="0"/>
                                                                <GradientStop Color="#FF749DD2" Offset="1"/>
                                                            </RadialGradientBrush>
                                                        </Thumb.Background>
                                                    </Thumb>
                                                </Grid>
                                            </Grid>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Grid.Resources>

                        <Grid.RowDefinitions>
                            <RowDefinition Height="64" />
                            <RowDefinition Height="0" />
                            <RowDefinition />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>

                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates" >
                                <VisualState x:Name="Normal" />
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetName="NavigatorRootGrid" Storyboard.TargetProperty="Opacity" To="1.0" Duration="0:0:0" />
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>

                        <Grid x:Name="Navigator" Grid.Row="0" Width="60" Height="60" Background="Transparent" RenderTransformOrigin="0.5,0.5" Margin="0,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center">
                            <Grid.RenderTransform>
                                <RotateTransform x:Name="TransformRotate" Angle="0"/>
                            </Grid.RenderTransform>
                            <Ellipse x:Name="RotateRing1" Width="60" Height="60" HorizontalAlignment="Center" 
                                     VerticalAlignment="Center" StrokeThickness="{TemplateBinding BorderThickness}" 
                                     Stroke="#FFA6A6A6">
                                <Ellipse.Fill>
                                    <RadialGradientBrush>
                                        <GradientStop Color="#FFFBF9FA" Offset="0"/>
                                        <GradientStop Color="#FFFBF9FA" Offset="1"/>
                                    </RadialGradientBrush>
                                </Ellipse.Fill>
                            </Ellipse>
                            <local:ButtonGrid x:Name="PanUp" Margin="0,2,0,0" 
                                                BackgroundShape="M0.0,4.0 A10,3.0 0 0 1 20,4.0 L16,16 A8.0,4.0 0 0 0 4.0,16 L0.0,4.0 z" 
                                                ForegroundShape="M0.0,1.0 L0.5,0.0 L1.0,1.0 z" Width="20" Height="16" ForeBorderBrush="Transparent"
                                                ForeBorderThick="0" ForeShapeFill="{TemplateBinding Foreground}" MouseOverBackFill="#F0999999"
                                                MouseOverForeFill="Cyan" VerticalAlignment="Top" HorizontalAlignment="Center"
                                                ToolTipService.ToolTip="向上平移" Cursor="Hand" />
                            <local:ButtonGrid x:Name="PanDown" Margin="0,0,0,2" BackgroundShape="M20,12 A10,3.0 0 0 1 0.0,12 L4.0,0.0 A8.0,4.0 0 0 0 16,0.0 L20.0,12 z"
                                                ForegroundShape="M0.0,0.0 L0.5,1.0 L1.0,0.0" Width="20" Height="16" 
                                                ForeBorderBrush="{TemplateBinding Foreground}" MouseOverBackFill="#F0999999" MouseOverForeBorderBrush="Cyan"
                                                VerticalAlignment="Bottom" HorizontalAlignment="Center" ToolTipService.ToolTip="向下平移" Cursor="Hand"/>
                            <local:ButtonGrid x:Name="PanLeft" Margin="2,0,0,0" BackgroundShape="M4.0,0.0 L16,4.0 A4.0,8.0 0 0 0 16,16 L4.0,20 A3.0,10 0 0 1 4.0,0.0 z" 
                                                ForegroundShape="M1.0,0.0 L0.0,0.5 L1.0,1.0" Width="16" Height="20"
                                                ForeBorderBrush="{TemplateBinding Foreground}" MouseOverBackFill="#F0999999" MouseOverForeBorderBrush="Cyan" 
                                                HorizontalAlignment="Left" VerticalAlignment="Center" ToolTipService.ToolTip="向左平移" Cursor="Hand"/>
                            <local:ButtonGrid x:Name="PanRight" Margin="0,0,2,0" BackgroundShape="M12,0 A3.0,10 0 0 1 12,20 L0.0,16 A4.0,8.0 0 0 0 0.0,4.0 L12.0,0.0 z"
                                                ForegroundShape="M0.0,0.0 L1.0,0.5 L0.0,1.0" Width="16" Height="20"
                                                ForeBorderBrush="{TemplateBinding Foreground}" MouseOverBackFill="#F0999999" MouseOverForeBorderBrush="Cyan"
                                                HorizontalAlignment="Right" VerticalAlignment="Center" ToolTipService.ToolTip="向右平移" Cursor="Hand"/>
                            <Button x:Name="ResetRotation" Margin="0,0,0,0" Visibility="Collapsed" Style="{StaticResource CircleButtonStyle}" Height="24" Width="24" 
                                    HorizontalAlignment="Center" VerticalAlignment="Center" Background="#F0FFFFFF" BorderBrush="Transparent" BorderThickness="0" 
                                    ToolTipService.ToolTip="Reset Map North" Cursor="Hand">
                                <Image Source="../Images/icons/i_nav.png" Width="20" Height="20" Stretch="Uniform" />
                            </Button>
                        </Grid>

                        <Grid x:Name="ZoomHistoryPanel" Grid.Row="1" Margin="0,8,0,8" Visibility="Collapsed" Background="Transparent" HorizontalAlignment="Center">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="16"/>
                                <ColumnDefinition Width="24"/>
                                <ColumnDefinition Width="16"/>
                            </Grid.ColumnDefinitions>
                            <local:ButtonGrid  x:Name="ZoomBackButton" Grid.Column="0" Margin="1,0,-1,0"
                                                BackgroundShape="M4.0,0.0 L16,4.0 A4.0,8.0 0 0 0 16,16 L4.0,20 A3.0,10 0 0 1 4.0,0.0 z" 
                                                ForegroundShape="M1.0,0.0 L0.0,0.5 L1.0,1.0" Width="16" Height="20" BackShapeFill="{TemplateBinding Background}" 
                                                ForeBorderBrush="{TemplateBinding Foreground}" MouseOverBackFill="#F0666666" MouseOverForeBorderBrush="Cyan"
                                                HorizontalAlignment="Left" VerticalAlignment="Center" ToolTipService.ToolTip="Zoom to Previous Extent" Cursor="Hand"/>
                            <Button x:Name="ZoomFullButton" Grid.Column="1" Margin="0,0,0,0" Height="24" Width="24" Style="{StaticResource CircleButtonStyle}" Background="#F0FFFFFF" BorderBrush="Transparent" BorderThickness="0" HorizontalAlignment="Center" VerticalAlignment="Center" ToolTipService.ToolTip="Zoom to Full Extent" Cursor="Hand">
                                <Image Source="../Images/icons/i_globe.png"  Width="20" Height="20" Stretch="Uniform" />
                            </Button>
                            <local:ButtonGrid x:Name="ZoomNextButton" Grid.Column="2" Margin="-1,0,1,0" BackgroundShape="M12,0 A3.0,10 0 0 1 12,20 L0.0,16 A4.0,8.0 0 0 0 0.0,4.0 L12.0,0.0 z" ForegroundShape="M0.0,0.0 L1.0,0.5 L0.0,1.0" Width="16" Height="20" BackShapeFill="{TemplateBinding Background}" ForeBorderBrush="{TemplateBinding Foreground}" MouseOverBackFill="#F0666666" MouseOverForeBorderBrush="Cyan" HorizontalAlignment="Right" VerticalAlignment="Center" ToolTipService.ToolTip="Zoom to Next Extent" Cursor="Hand"/>
                        </Grid>

                        <Border x:Name="ZoomSliderBorder" Grid.Row="2" Background="Transparent"
                                BorderBrush="Transparent" BorderThickness="0" CornerRadius="0" HorizontalAlignment="Center">
                            <StackPanel x:Name="ZoomStack" Orientation="Vertical">
                                <Button x:Name="ZoomInButton" Height="15" Width="22" Margin="2,4,2,0" Foreground="Black" 
                                        BorderBrush="#FFA6A6A6" BorderThickness="1" ToolTipService.ToolTip="Zoom In" Cursor="Hand" >
                                    <Button.Background>
                                        <RadialGradientBrush>
                                            <GradientStop Color="#FFFBF9FA" Offset="0"/>
                                            <GradientStop Color="#FFFBF9FA" Offset="1"/>
                                        </RadialGradientBrush>
                                    </Button.Background>
                                    <Path Stroke="#a6a6a6" StrokeThickness="2" 
                                          Width="10" Height="10" Stretch="Fill" Data="M0.0,0.5 L1.0,0.5 M0.5,0.0 L0.5,1.0" 
                                          Fill="#FF949494"/>
                                </Button>
                                <Grid x:Name="ZoomLevelGrid">
                                    <Slider x:Name="ZoomSlider" Orientation="Vertical" Height="150" Width="20" Foreground="{StaticResource ThumbGradientBrush}"
                                            Minimum="0" Maximum="1" SmallChange="1" LargeChange="1" 
                                            ToolTipService.ToolTip="拖动缩放" Style="{StaticResource ZoomSliderStyle}" 
                                            BorderBrush="#a6a6a6" RenderTransformOrigin="0,0" Cursor="SizeNS" Background="#fbf9fa" />
                                </Grid>
                                <Button x:Name="ZoomOutButton" Height="15" Width="22" Margin="2,0,2,4" Foreground="Black" 
                                        BorderBrush="#FFA6A6A6" BorderThickness="1" ToolTipService.ToolTip="Zoom Out" Cursor="Hand">
                                    <Button.Background>
                                        <RadialGradientBrush>
                                            <GradientStop Color="#FFFBF9FA" Offset="0"/>
                                            <GradientStop Color="White" Offset="1"/>
                                        </RadialGradientBrush>
                                    </Button.Background>
                                    <Path Stroke="#a6a6a6"  StrokeThickness="2" Width="10" Height="10" Stretch="Fill" Data="M0.0,0.5 L1.0,0.5"/>
                                </Button>
                            </StackPanel>
                        </Border>

                        <ContentPresenter Grid.Row="3" ContentTemplate="{TemplateBinding ContentTemplate}"
                                          Content="{TemplateBinding Content}"
                                          Margin="{TemplateBinding Padding}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
ArcGis API FOR Silverlight 做了个导航工具~
上一篇:iOS学习-《iOS编程(第四版)》


下一篇:高效开发Android App的10个建议(转)