fxhomeSoft-silverlight地图引擎开发教程 之 地图移动控件
返回目录查看更多
=========================================================================
思路:
1、用BLAND绘制背景图
2、布局BUTTON,并建立BUTTON的样式模版
3、由计时器负责对地图显示层进行位置偏移,通过鼠标左键按下来启动计时器,鼠标离开或抬起关闭计时器。
先来看看效果
=========================================================================

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:fxhomeSoftMaps" x:Class="fxhomeSoftMaps.roundLogoControl"
mc:Ignorable="d"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="ButtonStyle_roundPlay" TargetType="Button">
<Setter Property="Background" Value="#FF1F3B53"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<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="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFE6FF04" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="path" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimation Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(BoEllipserder.Fill).(SolidColorBrush.Color)" To="#FF6DBDD1"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.6" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFE6FF04" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="path" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To=".55"/>
<ColorAnimation Duration="0" To="{StaticResource Color4}" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="DisabledVisualElement" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Unfocused" />
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Ellipse x:Name="Background" Fill="{TemplateBinding Background}" StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}"/>
<Grid Margin="1">
<Ellipse Opacity="0" x:Name="BackgroundAnimation" Fill="#FF448DCA" />
<Ellipse x:Name="BackgroundGradient" >
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
<Ellipse x:Name="DisabledVisualElement" Opacity="0" IsHitTestVisible="false" StrokeThickness="2" Stroke="Black" />
<Ellipse x:Name="FocusVisualElement" Margin="1" Stroke="#FF6DBDD1" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
<Path x:Name="path" Data="M176.50267,146.41614 L108.467,115.90072 L107.00239,174.33449 z" Stretch="Fill" UseLayoutRounding="False" Margin="25,20,15,20">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#FFA7A1A1"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ButtonStyle_roundPlay2" TargetType="Button">
<Setter Property="Background" Value="#FF1F3B53"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<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="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFFFD200" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimation Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(BoEllipserder.Fill).(SolidColorBrush.Color)" To="#FF6DBDD1"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.6" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFFD7F00" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To=".55"/>
<ColorAnimation Duration="0" To="{StaticResource Color4}" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="DisabledVisualElement" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Unfocused" />
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Ellipse x:Name="Background" Fill="{TemplateBinding Background}" StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}"/>
<Grid Margin="1">
<Ellipse Opacity="0" x:Name="BackgroundAnimation" Fill="#FF448DCA" />
<Ellipse x:Name="BackgroundGradient" >
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
<Ellipse x:Name="ellipse" Margin="20">
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="#FFA7A1A1" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
<Ellipse x:Name="DisabledVisualElement" Opacity="0" IsHitTestVisible="false" StrokeThickness="2" Stroke="Black" />
<Ellipse x:Name="FocusVisualElement" Margin="1" Stroke="#FF6DBDD1" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Viewbox>
<Grid Height="300" Width="300">
<Ellipse StrokeThickness="2">
<Ellipse.Stroke>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="{StaticResource Color4}" Offset="0"/>
<GradientStop Color="{StaticResource Color3}" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Stroke>
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Ellipse StrokeThickness="2" Width="200" Height="200">
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Path Data="M3.2329483,173.8101 C84.211098,198.75726 189.35806,105.43044 296,123 C287.86032,86.367081 272.57867,56.694218 234.95506,27.104677 C176.1524,-10.442161 105.14085,-7.209971 49.57774,40.283051 C-0.75358379,88.273628 -0.50443387,142.06471 3.2329483,173.8101 z" Stretch="Fill" UseLayoutRounding="False" Margin="0,0,6,123" d:LayoutOverrides="Width, Height">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop/>
<GradientStop Color="#B2FFFFFF" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
<Button x:Name="rightMove" MouseLeftButtonDown="rightMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Right" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" Margin="0,0,20,0"/>
<Button x:Name="bottomMove" MouseLeftButtonDown="bottomMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Center" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" VerticalAlignment="Bottom" Margin="0,0,0,20" RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<CompositeTransform Rotation="90"/>
</Button.RenderTransform>
</Button>
<Button x:Name="topMove" MouseLeftButtonDown="topMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Center" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" VerticalAlignment="Top" Margin="0,20,0,0" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto">
<Button.RenderTransform>
<CompositeTransform Rotation="-90"/>
</Button.RenderTransform>
</Button>
<Button x:Name="leftMove" MouseLeftButtonDown="leftMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Left" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto" Margin="20,0,0,0">
<Button.RenderTransform>
<CompositeTransform Rotation="180"/>
</Button.RenderTransform>
</Button>
<Button Content="" Click="restoreButton_Click" x:Name="restoreButton" Width="70" Height="70" Style="{StaticResource ButtonStyle_roundPlay2}" />
</Grid>
</Viewbox>
</Grid>
</UserControl>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:fxhomeSoftMaps" x:Class="fxhomeSoftMaps.roundLogoControl"
mc:Ignorable="d"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="ButtonStyle_roundPlay" TargetType="Button">
<Setter Property="Background" Value="#FF1F3B53"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<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="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFE6FF04" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="path" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimation Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(BoEllipserder.Fill).(SolidColorBrush.Color)" To="#FF6DBDD1"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.6" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFE6FF04" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="path" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To=".55"/>
<ColorAnimation Duration="0" To="{StaticResource Color4}" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="DisabledVisualElement" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Unfocused" />
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Ellipse x:Name="Background" Fill="{TemplateBinding Background}" StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}"/>
<Grid Margin="1">
<Ellipse Opacity="0" x:Name="BackgroundAnimation" Fill="#FF448DCA" />
<Ellipse x:Name="BackgroundGradient" >
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
<Ellipse x:Name="DisabledVisualElement" Opacity="0" IsHitTestVisible="false" StrokeThickness="2" Stroke="Black" />
<Ellipse x:Name="FocusVisualElement" Margin="1" Stroke="#FF6DBDD1" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
<Path x:Name="path" Data="M176.50267,146.41614 L108.467,115.90072 L107.00239,174.33449 z" Stretch="Fill" UseLayoutRounding="False" Margin="25,20,15,20">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#FFA7A1A1"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ButtonStyle_roundPlay2" TargetType="Button">
<Setter Property="Background" Value="#FF1F3B53"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush">
<Setter.Value>
<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="#FF617584" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFFFD200" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimation Duration="0" Storyboard.TargetName="Background" Storyboard.TargetProperty="(BoEllipserder.Fill).(SolidColorBrush.Color)" To="#FF6DBDD1"/>
<DoubleAnimation Duration="0" Storyboard.TargetName="BackgroundAnimation" Storyboard.TargetProperty="Opacity" To="1"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" To="{StaticResource Color2}"/>
<ColorAnimation Duration="0" Storyboard.TargetName="BackgroundGradient" Storyboard.TargetProperty="(Ellipse.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" To="{StaticResource Color1}"/>
<DoubleAnimation Duration="0" To="0.6" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Offset)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FFFD7F00" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="ellipse" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To=".55"/>
<ColorAnimation Duration="0" To="{StaticResource Color4}" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="DisabledVisualElement" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<vsm:VisualStateGroup x:Name="FocusStates">
<vsm:VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Opacity" To="1"/>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Unfocused" />
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Ellipse x:Name="Background" Fill="{TemplateBinding Background}" StrokeThickness="{TemplateBinding BorderThickness}" Stroke="{TemplateBinding BorderBrush}"/>
<Grid Margin="1">
<Ellipse Opacity="0" x:Name="BackgroundAnimation" Fill="#FF448DCA" />
<Ellipse x:Name="BackgroundGradient" >
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
<Ellipse x:Name="ellipse" Margin="20">
<Ellipse.Fill>
<RadialGradientBrush>
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="#FFA7A1A1" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<ContentPresenter
x:Name="contentPresenter"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
<Ellipse x:Name="DisabledVisualElement" Opacity="0" IsHitTestVisible="false" StrokeThickness="2" Stroke="Black" />
<Ellipse x:Name="FocusVisualElement" Margin="1" Stroke="#FF6DBDD1" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Viewbox>
<Grid Height="300" Width="300">
<Ellipse StrokeThickness="2">
<Ellipse.Stroke>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="{StaticResource Color4}" Offset="0"/>
<GradientStop Color="{StaticResource Color3}" Offset="1"/>
</LinearGradientBrush>
</Ellipse.Stroke>
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Ellipse StrokeThickness="2" Width="200" Height="200">
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.4,0.4" RadiusY="0.6" RadiusX="0.6">
<GradientStop Color="{StaticResource Color2}" Offset="1"/>
<GradientStop Color="{StaticResource Color1}"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Path Data="M3.2329483,173.8101 C84.211098,198.75726 189.35806,105.43044 296,123 C287.86032,86.367081 272.57867,56.694218 234.95506,27.104677 C176.1524,-10.442161 105.14085,-7.209971 49.57774,40.283051 C-0.75358379,88.273628 -0.50443387,142.06471 3.2329483,173.8101 z" Stretch="Fill" UseLayoutRounding="False" Margin="0,0,6,123" d:LayoutOverrides="Width, Height">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop/>
<GradientStop Color="#B2FFFFFF" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
<Button x:Name="rightMove" MouseLeftButtonDown="rightMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Right" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" Margin="0,0,20,0"/>
<Button x:Name="bottomMove" MouseLeftButtonDown="bottomMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Center" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" VerticalAlignment="Bottom" Margin="0,0,0,20" RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<CompositeTransform Rotation="90"/>
</Button.RenderTransform>
</Button>
<Button x:Name="topMove" MouseLeftButtonDown="topMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Center" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" VerticalAlignment="Top" Margin="0,20,0,0" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto">
<Button.RenderTransform>
<CompositeTransform Rotation="-90"/>
</Button.RenderTransform>
</Button>
<Button x:Name="leftMove" MouseLeftButtonDown="leftMove_MouseLeftButtonDown" MouseLeftButtonUp="Move_MouseLeftButtonUp" HorizontalAlignment="Left" Width="70" Style="{StaticResource ButtonStyle_roundPlay}" Height="70" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" UseLayoutRounding="False" d:LayoutRounding="Auto" Margin="20,0,0,0">
<Button.RenderTransform>
<CompositeTransform Rotation="180"/>
</Button.RenderTransform>
</Button>
<Button Content="" Click="restoreButton_Click" x:Name="restoreButton" Width="70" Height="70" Style="{StaticResource ButtonStyle_roundPlay2}" />
</Grid>
</Viewbox>
</Grid>
</UserControl>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace fxhomeSoftMaps
{
public partial class roundLogoControl : UserControl
{
public roundLogoControl()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(roundLogoControl_Loaded);
}
void roundLogoControl_Loaded(object sender, RoutedEventArgs e)
{
createDispatcherTimer();
rightMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(rightMove_MouseLeftButtonDown), true);
rightMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
leftMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(leftMove_MouseLeftButtonDown), true);
leftMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
topMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(topMove_MouseLeftButtonDown), true);
topMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
bottomMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(bottomMove_MouseLeftButtonDown), true);
bottomMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
}
DispatcherTimer timer = new DispatcherTimer();
string moveType;
private view_indexMap _viewIndexMap;
public view_indexMap viewIndexMap
{
set
{
_viewIndexMap = value;
}
get
{
return _viewIndexMap;
}
}
void createDispatcherTimer()
{
timer.Interval = new TimeSpan(0, 0, 0, 0, 5);
timer.Tick += new EventHandler(timer_Tick);
}
void moveObject()
{
double p = 1;
if (moveType == "left")
{
p = viewIndexMap.viewboxCT.TranslateX - p;
viewIndexMap.viewboxCT.TranslateX = p;
}
if (moveType == "up")
{
p = viewIndexMap.viewboxCT.TranslateY - p;
viewIndexMap.viewboxCT.TranslateY = p;
}
if (moveType == "right")
{
p = viewIndexMap.viewboxCT.TranslateX + p;
viewIndexMap.viewboxCT.TranslateX = p;
}
if (moveType == "down")
{
p = viewIndexMap.viewboxCT.TranslateY + p;
viewIndexMap.viewboxCT.TranslateY = p;
}
}
void timer_Tick(object sender, EventArgs e)
{
moveObject();
}
private void Move_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
timer.Stop();
}
private void rightMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "right";
timer.Start();
}
private void bottomMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "down";
timer.Start();
}
private void topMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "up";
timer.Start();
}
private void leftMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "left";
timer.Start();
}
private void restoreButton_Click(object sender, RoutedEventArgs e)
{
viewIndexMap.viewboxCT.TranslateX = 0;
viewIndexMap.viewboxCT.TranslateY = 0;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace fxhomeSoftMaps
{
public partial class roundLogoControl : UserControl
{
public roundLogoControl()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(roundLogoControl_Loaded);
}
void roundLogoControl_Loaded(object sender, RoutedEventArgs e)
{
createDispatcherTimer();
rightMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(rightMove_MouseLeftButtonDown), true);
rightMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
leftMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(leftMove_MouseLeftButtonDown), true);
leftMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
topMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(topMove_MouseLeftButtonDown), true);
topMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
bottomMove.AddHandler(Button.MouseLeftButtonDownEvent, new MouseButtonEventHandler(bottomMove_MouseLeftButtonDown), true);
bottomMove.AddHandler(Button.MouseLeftButtonUpEvent, new MouseButtonEventHandler(Move_MouseLeftButtonUp), true);
}
DispatcherTimer timer = new DispatcherTimer();
string moveType;
private view_indexMap _viewIndexMap;
public view_indexMap viewIndexMap
{
set
{
_viewIndexMap = value;
}
get
{
return _viewIndexMap;
}
}
void createDispatcherTimer()
{
timer.Interval = new TimeSpan(0, 0, 0, 0, 5);
timer.Tick += new EventHandler(timer_Tick);
}
void moveObject()
{
double p = 1;
if (moveType == "left")
{
p = viewIndexMap.viewboxCT.TranslateX - p;
viewIndexMap.viewboxCT.TranslateX = p;
}
if (moveType == "up")
{
p = viewIndexMap.viewboxCT.TranslateY - p;
viewIndexMap.viewboxCT.TranslateY = p;
}
if (moveType == "right")
{
p = viewIndexMap.viewboxCT.TranslateX + p;
viewIndexMap.viewboxCT.TranslateX = p;
}
if (moveType == "down")
{
p = viewIndexMap.viewboxCT.TranslateY + p;
viewIndexMap.viewboxCT.TranslateY = p;
}
}
void timer_Tick(object sender, EventArgs e)
{
moveObject();
}
private void Move_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
timer.Stop();
}
private void rightMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "right";
timer.Start();
}
private void bottomMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "down";
timer.Start();
}
private void topMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "up";
timer.Start();
}
private void leftMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
moveType = "left";
timer.Start();
}
private void restoreButton_Click(object sender, RoutedEventArgs e)
{
viewIndexMap.viewboxCT.TranslateX = 0;
viewIndexMap.viewboxCT.TranslateY = 0;
}
}
}
作者: fxhome 软件快餐店 发表于 2011-01-06 17:10 原文链接
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架