ArcGIS API for Silverlight開發中滑鼠左鍵點選地圖上的點彈出視窗及右鍵點選彈出快捷選單的實現程式碼
1、首先在SL專案中新增一個抽象類ContextMenu.cs檔案,程式碼如下:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
namespace MapClient
{
public abstract class ContextMenu
{
private Point _location;
private bool _isShowing;
private Popup _popup;
private Grid _grid;
private Canvas _canvas;
private FrameworkElement _content;
//初始化並顯示彈出窗體.公共方法在顯示選單項時呼叫
public void Show(Point location)
{
if (_isShowing)
throw new InvalidOperationException();
_isShowing = true;
_location = location;
ConstructPopup();
_popup.IsOpen = true;
}
//關閉彈出窗體
public void Close()
{
_isShowing = false;
if (_popup != null)
{
_popup.IsOpen = false;
}
}
//abstract function that the child class needs to implement to return the framework element that needs to be displayed in the popup window.
protected abstract FrameworkElement GetContent();
//Default behavior for OnClickOutside() is to close the context menu when there is a mouse click event outside the context menu
protected virtual void OnClickOutside()
{
Close();
}
// 用Grid來佈局,初始化彈出窗體
//在Grid裡面新增一個Canvas,用來監測選單項外面的滑鼠點選事件
//
// Add the Framework Element returned by GetContent() to the grid and position it at _location
private void ConstructPopup()
{
if (_popup != null)
return;
_popup = new Popup();
_grid = new Grid();
_popup.Child = _grid;
_canvas = new Canvas();
_canvas.MouseLeftButtonDown += (sender, args) => { OnClickOutside(); };
_canvas.MouseRightButtonDown += (sender, args) => { args.Handled = true; OnClickOutside(); };
_canvas.Background = new SolidColorBrush(Colors.Transparent);
_grid.Children.Add(_canvas);
_content = GetContent();
_content.HorizontalAlignment = HorizontalAlignment.Left;
_content.VerticalAlignment = VerticalAlignment.Top;
_content.Margin = new Thickness(_location.X, _location.Y, 0, 0);
_grid.Children.Add(_content);
UpdateSize();
}
/// <summary>
/// 更新大小
/// </summary>
private void UpdateSize()
{
_grid.Width = Application.Current.Host.Content.ActualWidth;
_grid.Height = Application.Current.Host.Content.ActualHeight;
if (_canvas != null)
{
_canvas.Width = _grid.Width;
_canvas.Height = _grid.Height;
}
}
}
}
2、再新增一個類用來實現左鍵點選彈出控制元件MapTips.cs檔案,程式碼如下
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.Media.Effects;
using System.Windows.Media.Imaging;
using MapClient.ServiceReference1;
namespace MapClient
{
public class MapTips : ContextMenu
{
RichTextBox rtb;
string placeName = string.Empty;
string areaID = string.Empty;
string year = string.Empty;
string cycleID = string.Empty;
//彈出視窗中的顯示文字控制元件
TextBlock tb_title; //標題
TextBlock tb_grade1; //苗情等級1
TextBlock tb_grade2; //苗情等級2
TextBlock tb_grade3; //苗情等級3
TextBlock tb_grade4; //苗情等級4
TextBlock tb_percent1; //佔比1
TextBlock tb_percent2; //佔比2
TextBlock tb_percent3; //佔比3
TextBlock tb_percent4; //佔比4
TextBlock tb_area1; //面積1
TextBlock tb_area2; //面積2
TextBlock tb_area3; //面積3
TextBlock tb_area4; //面積4
HyperlinkButton hlb1; //超連結1
HyperlinkButton hlb2; //超連結2
HyperlinkButton hlb3; //超連結3
public MapTips(RichTextBox rtb, string name, string areaID, string year, string cycleID)
{
this.rtb = rtb;
this.placeName = name;
this.areaID = areaID;
this.year = year;
this.cycleID = cycleID;
}
//構造選單按鈕並返回一個FrameworkElement物件
protected override FrameworkElement GetContent()
{
Border border = new Border() { BorderBrush = new SolidColorBrush(Color.FromArgb(255, 167, 171, 176)), BorderThickness = new Thickness(1), Background = new SolidColorBrush(Colors.White) };
border.Effect = new DropShadowEffect() { BlurRadius = 3, Color = Color.FromArgb(255, 230, 227, 236) };
Grid grid = new Grid() { Margin = new Thickness(1) };
//九行
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(30) });
//三列
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(80) });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(80) });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(80) });
//標題第一列
tb_title = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_title, 0);
Grid.SetColumn(tb_title, 0);
Grid.SetColumnSpan(tb_title, 3);
grid.Children.Add(tb_title);
//苗情等級標題
TextBlock tb_grade = new TextBlock() { Text = "苗情等級", FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_grade, 1);
Grid.SetColumn(tb_grade, 0);
grid.Children.Add(tb_grade);
//旺苗
tb_grade1 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_grade1, 2);
Grid.SetColumn(tb_grade1, 0);
grid.Children.Add(tb_grade1);
//一級苗
tb_grade2 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_grade2, 3);
Grid.SetColumn(tb_grade2, 0);
grid.Children.Add(tb_grade2);
//二級苗
tb_grade3 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_grade3, 4);
Grid.SetColumn(tb_grade3, 0);
grid.Children.Add(tb_grade3);
//三級苗
tb_grade4 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_grade4, 5);
Grid.SetColumn(tb_grade4, 0);
grid.Children.Add(tb_grade4);
//佔比標題
TextBlock tb_percent = new TextBlock() { Text = "佔 比", FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_percent, 1);
Grid.SetColumn(tb_percent, 1);
grid.Children.Add(tb_percent);
//旺苗佔比
tb_percent1 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_percent1, 2);
Grid.SetColumn(tb_percent1, 1);
grid.Children.Add(tb_percent1);
//一級苗佔比
tb_percent2 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_percent2, 3);
Grid.SetColumn(tb_percent2, 1);
grid.Children.Add(tb_percent2);
//二級苗佔比
tb_percent3 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_percent3, 4);
Grid.SetColumn(tb_percent3, 1);
grid.Children.Add(tb_percent3);
//三級苗佔比
tb_percent4 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_percent4, 5);
Grid.SetColumn(tb_percent4, 1);
grid.Children.Add(tb_percent4);
//面積標題
TextBlock tb_area = new TextBlock() { Text = "面積(萬畝)", FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_area, 1);
Grid.SetColumn(tb_area, 2);
grid.Children.Add(tb_area);
//旺苗面積(萬畝)
tb_area1 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_area1, 2);
Grid.SetColumn(tb_area1, 2);
grid.Children.Add(tb_area1);
//一級苗面積(萬畝)
tb_area2 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_area2, 3);
Grid.SetColumn(tb_area2, 2);
grid.Children.Add(tb_area2);
//二級苗面積(萬畝)
tb_area3 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_area3, 4);
Grid.SetColumn(tb_area3, 2);
grid.Children.Add(tb_area3);
//三級苗面積(萬畝)
tb_area4 = new TextBlock() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(tb_area4, 5);
Grid.SetColumn(tb_area4, 2);
grid.Children.Add(tb_area4);
//超連結(苗情評價分析)
hlb1 = new HyperlinkButton() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(hlb1, 6);
Grid.SetColumn(hlb1, 0);
Grid.SetColumnSpan(hlb1, 3);
grid.Children.Add(hlb1);
//超連結(苗情資料包表)
hlb2 = new HyperlinkButton() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(hlb2, 7);
Grid.SetColumn(hlb2, 0);
Grid.SetColumnSpan(hlb2, 3);
grid.Children.Add(hlb2);
//超連結(苗情監測報告)
hlb3 = new HyperlinkButton() { FontSize = 14, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };
Grid.SetRow(hlb3, 8);
Grid.SetColumn(hlb3, 0);
Grid.SetColumnSpan(hlb3, 3);
grid.Children.Add(hlb3);
border.Child = grid;
getData1SoapClient client = new getData1SoapClient();
client.GetCommentInfoCompleted += new EventHandler<GetCommentInfoCompletedEventArgs>(client_GetCommentInfoCompleted);
client.GetCommentInfoAsync(areaID, year, cycleID);
return border;
}
void client_GetCommentInfoCompleted(object sender, GetCommentInfoCompletedEventArgs e)
{
//設定值
tb_title.Text = result.Split(',')[0].Split(':')[1];
//苗情評價分析
hlb1.Content = result.Split(',')[1].Split(':')[1];
hlb1.NavigateUri = new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute);
//苗情資料包表
hlb2.Content = result.Split(',')[2].Split(':')[1];
hlb2.NavigateUri = new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute);
//苗情監測報告
hlb3.Content = result.Split(',')[3].Split(':')[1];
hlb3.NavigateUri = new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute);
//旺苗等級、佔比和麵積
tb_grade1.Text = result.Split(',')[4].Split('|')[0].Split(':')[1];
tb_percent1.Text = result.Split(',')[4].Split('|')[1].Split(':')[1];
tb_area1.Text = result.Split(',')[4].Split('|')[2].Split(':')[1];
//一級苗等級、佔比和麵積
tb_grade2.Text = result.Split(',')[5].Split('|')[0].Split(':')[1];
tb_percent2.Text = result.Split(',')[5].Split('|')[1].Split(':')[1];
tb_area2.Text = result.Split(',')[5].Split('|')[2].Split(':')[1];
//二級苗等級、佔比和麵積
tb_grade3.Text = result.Split(',')[6].Split('|')[0].Split(':')[1];
tb_percent3.Text = result.Split(',')[6].Split('|')[1].Split(':')[1];
tb_area3.Text = result.Split(',')[6].Split('|')[2].Split(':')[1];
//三級苗等級、佔比和麵積
tb_grade4.Text = result.Split(',')[7].Split('|')[0].Split(':')[1];
tb_percent4.Text = result.Split(',')[7].Split('|')[1].Split(':')[1];
tb_area4.Text = result.Split(',')[7].Split('|')[2].Split(':')[1];
}
}
}
3、新增一個滑鼠右鍵彈出的快捷選單控制元件RTBContextMenu .cs檔案,程式碼如下:
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.Media.Effects;
using System.Windows.Media.Imaging;
namespace MapClient
{
public class RTBContextMenu : ContextMenu
{
RichTextBox rtb;
string placeName = string.Empty;
public RTBContextMenu(RichTextBox rtb, string name)
{
this.rtb = rtb;
this.placeName = name;
}
//構造選單按鈕並返回一個FrameworkElement物件
protected override FrameworkElement GetContent()
{
Border border = new Border() { BorderBrush = new SolidColorBrush(Color.FromArgb(255, 167, 171, 176)), BorderThickness = new Thickness(1), Background = new SolidColorBrush(Colors.White) };
border.Effect = new DropShadowEffect() { BlurRadius = 3, Color = Color.FromArgb(255, 230, 227, 236) };
Grid grid = new Grid() { Margin = new Thickness(1) };
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(25) });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(105) });
grid.Children.Add(new Rectangle() { Fill = new SolidColorBrush(Color.FromArgb(255, 233, 238, 238)) });
grid.Children.Add(new Rectangle() { Fill = new SolidColorBrush(Color.FromArgb(255, 226, 228, 231)), HorizontalAlignment = HorizontalAlignment.Right, Width = 1 });
//田間視訊
Button tjspButton = new Button() { Height = 22, Margin = new Thickness(0, 0, 0, 0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, HorizontalContentAlignment = HorizontalAlignment.Left };
tjspButton.Style = Application.Current.Resources["ContextMenuButton"] as Style;
tjspButton.Click += tjsp_MouseLeftButtonUp;
Grid.SetColumnSpan(tjspButton, 2);
StackPanel sp = new StackPanel() { Orientation = Orientation.Horizontal };
Image tjspImage = new Image() { HorizontalAlignment = HorizontalAlignment.Left, Width = 16, Height = 16, Margin = new Thickness(1, 0, 0, 0) };
tjspImage.Source = new BitmapImage(new Uri("/MapClient;component/Images/pop-movie.png", UriKind.RelativeOrAbsolute));
sp.Children.Add(tjspImage);
TextBlock tjspText = new TextBlock() { Text = "田間視訊", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(16, 0, 0, 0) };
sp.Children.Add(tjspText);
tjspButton.Content = sp;
grid.Children.Add(tjspButton);
//作物像片
Button zwxpButton = new Button() { Height = 22, Margin = new Thickness(0, 24, 0, 0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, HorizontalContentAlignment = HorizontalAlignment.Left };
zwxpButton.Style = Application.Current.Resources["ContextMenuButton"] as Style;
zwxpButton.Click += zwxp_MouseLeftButtonUp;
Grid.SetColumnSpan(zwxpButton, 2);
sp = new StackPanel() { Orientation = Orientation.Horizontal };
Image zwxpImage = new Image() { HorizontalAlignment = HorizontalAlignment.Left, Width = 16, Height = 16, Margin = new Thickness(1, 0, 0, 0) };
zwxpImage.Source = new BitmapImage(new Uri("/MapClient;component/Images/pop-pic.png", UriKind.RelativeOrAbsolute));
sp.Children.Add(zwxpImage);
TextBlock zwxpText = new TextBlock() { Text = "作物圖片", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(16, 0, 0, 0) };
sp.Children.Add(zwxpText);
zwxpButton.Content = sp;
grid.Children.Add(zwxpButton);
//專家會議
Button zjhyButton = new Button() { Height = 22, Margin = new Thickness(0, 48, 0, 0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, HorizontalContentAlignment = HorizontalAlignment.Left };
zjhyButton.Style = Application.Current.Resources["ContextMenuButton"] as Style;
zjhyButton.Click += zjhy_MouseLeftButtonUp;
Grid.SetColumnSpan(zjhyButton, 2);
sp = new StackPanel() { Orientation = Orientation.Horizontal };
Image zjhyImage = new Image() { HorizontalAlignment = HorizontalAlignment.Left, Width = 16, Height = 16, Margin = new Thickness(1, 0, 0, 0) };
zjhyImage.Source = new BitmapImage(new Uri("/MapClient;component/Images/pop-person.png", UriKind.RelativeOrAbsolute));
sp.Children.Add(zjhyImage);
TextBlock zjhyText = new TextBlock() { Text = "專家會議", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(16, 0, 0, 0) };
sp.Children.Add(zjhyText);
zjhyButton.Content = sp;
grid.Children.Add(zjhyButton);
//現場聯動
Button xcldButton = new Button() { Height = 22, Margin = new Thickness(0, 72, 0, 0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, HorizontalContentAlignment = HorizontalAlignment.Left };
xcldButton.Style = Application.Current.Resources["ContextMenuButton"] as Style;
xcldButton.Click += xcld_MouseLeftButtonUp;
Grid.SetColumnSpan(xcldButton, 2);
sp = new StackPanel() { Orientation = Orientation.Horizontal };
Image xcldImage = new Image() { HorizontalAlignment = HorizontalAlignment.Left, Width = 16, Height = 16, Margin = new Thickness(1, 0, 0, 0) };
xcldImage.Source = new BitmapImage(new Uri("/MapClient;component/Images/pop-link.png", UriKind.RelativeOrAbsolute));
sp.Children.Add(xcldImage);
TextBlock xcldText = new TextBlock() { Text = "現場聯動", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(16, 0, 0, 0) };
sp.Children.Add(xcldText);
xcldButton.Content = sp;
grid.Children.Add(xcldButton);
border.Child = grid;
return border;
}
//
//處理事件
//
void tjsp_MouseLeftButtonUp(object sender, RoutedEventArgs e)
{
//頁面跳轉,使用引數進行url傳遞 引數值為placeName(請注意)
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("../SensorMonitor/VedioList.aspx?AreaName=" + placeName, UriKind.RelativeOrAbsolute), "_self");
Close();
}
void zwxp_MouseLeftButtonUp(object sender, RoutedEventArgs e)
{
//頁面跳轉
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("../SensorMonitor/InstantImage.aspx?AreaName=" + placeName, UriKind.RelativeOrAbsolute), "_self");
Close();
}
void zjhy_MouseLeftButtonUp(object sender, RoutedEventArgs e)
{
//頁面跳轉
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute), "_self");
Close();
}
void xcld_MouseLeftButtonUp(object sender, RoutedEventArgs e)
{
//頁面跳轉
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri("http://www.baidu.com", UriKind.RelativeOrAbsolute), "_self");
Close();
}
}
}
4、MainPage.xaml及MainPage.xaml.cs程式碼如下:
<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:esri="http://schemas.esri.com/arcgis/client/2009"
xmlns:toolkit="clr-namespace:ESRI.ArcGIS.Client.Toolkit;assembly=ESRI.ArcGIS.Client.Toolkit"
xmlns:symbols="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client"
xmlns:local="clr-namespace:GrowthMonitor"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:interaction="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
xmlns:slData="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="MapClient.MainPage" d:DesignHeight="300" d:DesignWidth="400" Loaded="UserControl_Loaded" mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.Resources>
<esri:SimpleMarkerSymbol x:Key="DefaultMarkerSymbol" Size="12" x:Name="dms_Point" Style="Circle">
<esri:SimpleMarkerSymbol.ControlTemplate>
<ControlTemplate>
<Grid x:Name="RootElement" RenderTransformOrigin="0.5,0.5" >
<Grid.RenderTransform>
<ScaleTransform ScaleX="1" ScaleY="1" />
</Grid.RenderTransform>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<Storyboard>
<DoubleAnimation BeginTime="00:00:00"
Storyboard.TargetName="RootElement"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
To="1" Duration="0:0:0.1" />
<DoubleAnimation BeginTime="00:00:00"
Storyboard.TargetName="RootElement"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
To="1" Duration="0:0:0.1" />
</Storyboard>
</VisualState>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation BeginTime="00:00:00"
Storyboard.TargetName="RootElement"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
To="1.5" Duration="0:0:0.1" />
<DoubleAnimation BeginTime="00:00:00"
Storyboard.TargetName="RootElement"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
To="1.5" Duration="0:0:0.1" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse x:Name="ellipse"
Width="{Binding Symbol.Size}"
Height="{Binding Symbol.Size}" >
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5"
RadiusX="0.5" RadiusY="0.5">
<GradientStop Color="Red" Offset="0.25" />
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</Grid>
</ControlTemplate>
</esri:SimpleMarkerSymbol.ControlTemplate>
</esri:SimpleMarkerSymbol>
<esri:SimpleLineSymbol x:Key="DefaultLineSymbol" Color="Red" Width="6" />
<esri:SimpleFillSymbol x:Key="DefaultFillSymbol" BorderBrush="Red" BorderThickness="2" x:Name="sf_Point"/>
</Grid.Resources>
<esri:Map x:Name="myMap" IsLogoVisible="False" Extent="114.289579051054,29.3907111115968,121.380372848428,33.7272787947227">
<i:Interaction.Behaviors>
<local:WheelZoom />
</i:Interaction.Behaviors>
<esri:Map.Layers>
<esri:ArcGISTiledMapServiceLayer ID="BaseLayer" Url="http://192.168.2.5/arcgis/rest/services/AnHuiBase/MapServer"/>
<!---特徵圖層-->
<!--<esri:FeatureLayer ID="MyFeatureLayer" Url="http://192.168.2.5/arcgis/rest/services/AnHuiDynamic/MapServer/0">
<esri:FeatureLayer.Clusterer>
<esri:FlareClusterer
FlareBackground="#99FF0000"
FlareForeground="White"
MaximumFlareCount="9"/>
</esri:FeatureLayer.Clusterer>
<esri:FeatureLayer.OutFields>
<sys:String>ID</sys:String>
<sys:String>Name</sys:String>
</esri:FeatureLayer.OutFields>
<esri:FeatureLayer.MapTip>
<Grid Background="Blue" Width="200" Height="200">
<StackPanel>
<TextBlock Text="{Binding [Name]}" Foreground="White" FontWeight="Bold" />
</StackPanel>
</Grid>
</esri:FeatureLayer.MapTip>
</esri:FeatureLayer>-->
<!--GraphicsLayer-->
<esri:GraphicsLayer ID="MyGraphicsLayer">
</esri:GraphicsLayer>
</esri:Map.Layers>
</esri:Map>
<Grid Height="60" HorizontalAlignment="Right" VerticalAlignment="Top" Width="300">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.128*"/>
<ColumnDefinition Width="0.142*"/>
<ColumnDefinition Width="0.14*"/>
<ColumnDefinition Width="0.15*"/>
<ColumnDefinition Width="0.14*"/>
<ColumnDefinition Width="0.14*"/>
<ColumnDefinition Width="0.15*"/>
</Grid.ColumnDefinitions>
<Border x:Name="bZoomIn" BorderThickness="1" Margin="0,-1,0,1">
<Border.Background>
<ImageBrush ImageSource="Images/i_zoomin.png" Stretch="None"/>
</Border.Background>
</Border>
<Border x:Name="bZoomOut" BorderThickness="1" Grid.Column="1" Margin="3,-2,2,2">
<Border.Background>
<ImageBrush ImageSource="Images/i_zoomout.png" Stretch="None"/>
</Border.Background>
</Border>
<Border x:Name="bPan" BorderThickness="1" Grid.Column="2" Margin="2,-1,2,1">
<Border.Background>
<ImageBrush ImageSource="Images/i_pan.png" Stretch="None"/>
</Border.Background>
</Border>
<Border x:Name="bPrevious" BorderThickness="1" Grid.Column="3" Margin="4,1,5,-1">
<Border.Background>
<ImageBrush ImageSource="Images/i_previous.png" Stretch="None"/>
</Border.Background>
</Border>
<Border x:Name="bNext" BorderThickness="1" Grid.Column="4" Margin="4,2,1,-2" RenderTransformOrigin="1.385,0.545">
<Border.Background>
<ImageBrush ImageSource="Images/i_next.png" Stretch="None"/>
</Border.Background>
</Border>
<Border x:Name="bFullExtent" BorderThickness="1" Grid.Column="5" Margin="2,0" RenderTransformOrigin="1.385,0.545">
<Border.Background>
<ImageBrush ImageSource="Images/i_globe.png" Stretch="None"/>
</Border.Background>
</Border>
<Border x:Name="bFullScreen" BorderThickness="1" Grid.Column="6" Margin="8,0,1,0" RenderTransformOrigin="1.385,0.545">
<Border.Background>
<ImageBrush ImageSource="Images/i_widget.png" Stretch="None"/>
</Border.Background>
</Border>
</Grid>
<esri:Navigation Margin="5" HorizontalAlignment="Left" VerticalAlignment="Bottom"
Map="{Binding ElementName=myMap}" >
</esri:Navigation>
<esri:MapProgressBar x:Name="MyProgressBar"
Map="{Binding ElementName=myMap}"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
Width="200" Height="36"
Margin="25" />
<StackPanel HorizontalAlignment="Right" Orientation="Horizontal" Margin="0,1,1,0" VerticalAlignment="Top">
<Button Style="{StaticResource darkButtonStyle}" Margin="3,0,0,0" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click" >
<local:ToggleFullScreenAction />
</i:EventTrigger>
</i:Interaction.Triggers>
<Image Source="Images/Fullscreen-32.png" Height="24" Margin="-4"
ToolTipService.ToolTip="全屏"/>
</Button>
</StackPanel>
<Button Content="查詢" Height="23" HorizontalAlignment="Left" Margin="279,110,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="161,110,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="45,110,0,0" Name="label1" FontSize="15" Content="輸入監測點名稱:" VerticalAlignment="Top" Width="120" />
</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 ESRI.ArcGIS.Client.Symbols;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Tasks;
using System.Windows.Data;
using System.Runtime.Serialization;
using ESRI.ArcGIS.Client.Geometry;
using MapClient.UserControls;
namespace MapClient
{
public partial class MainPage : UserControl
{
//一些列變數定義
public string str = null; //用來接收aspx頁面傳遞到xap中的引數字串
string[] infos = null;
public string level = string.Empty; //市縣等級 市=1/縣=2
public string areaId = string.Empty; //地區ID,包括市及縣的編號
public string color = string.Empty; //顏色值
public string year = string.Empty; //年份
public string cycleId = string.Empty; //生育週期編號
public MainPage(Dictionary<string, string> paramsDic)
{
InitializeComponent();
if (paramsDic.TryGetValue("STR", out str))
{
//獲取到aspx頁面傳遞過來的引數
}
//按照|進行拆分成每一個監測點的資訊
infos = str.Split('|');
//初始化頁面,開始地圖載入條
MyDrawObject = new Draw(myMap)
{
FillSymbol = LayoutRoot.Resources["DefaultFillSymbol"] as ESRI.ArcGIS.Client.Symbols.FillSymbol,
DrawMode = DrawMode.Rectangle
};
MyDrawObject.DrawComplete += myDrawObject_DrawComplete;
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
FindGraphicsAndShowInMap("監測點");
}
private void Button_Click(object sender, RoutedEventArgs e)
{
FindGraphicsAndShowInMap("臨泉監測點");
}
//#region 市界圖層
//public void FindCityGraphicsAndShowInMap(string conditions)
//{
// // 初始化查詢操作
// FindTask findCityTask = new FindTask("http://192.168.2.5/arcgis/rest/services/AnHuiDynamic/MapServer/");
// findCityTask.ExecuteCompleted += new EventHandler<FindEventArgs>(findCityTask_ExecuteCompleted);
// findCityTask.Failed += new EventHandler<TaskFailedEventArgs>(findCityTask_Failed);
// //初始化查詢引數,指定Name欄位作為小麥監測點層的搜素條件,並返回特徵圖層作為查詢結果
// FindParameters findParameters = new FindParameters();
// findParameters.LayerIds.AddRange(new int[] { 2 });
// findParameters.SearchFields.AddRange(new string[] { "AreaID", "NAME" });
// findParameters.ReturnGeometry = true;
// //要查詢點的資訊
// findParameters.SearchText = conditions;
// findCityTask.ExecuteAsync(findParameters);
//}
////查詢失敗
//void findCityTask_Failed(object sender, TaskFailedEventArgs e)
//{
// MessageBox.Show("查詢失敗: " + e.Error);
//}
//void findCityTask_ExecuteCompleted(object sender, FindEventArgs e)
//{
// // 清除先前的圖層
// GraphicsLayer graphicsLayer = myMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
// graphicsLayer.ClearGraphics();
// // 檢查新的結果
// if (e.FindResults.Count > 0)
// {
// //將查詢出來的結果在地圖上顯示出來
// foreach (FindResult result in e.FindResults)
// {
// result.Feature.Symbol = LayoutRoot.Resources["DefaultFillSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;
// graphicsLayer.Graphics.Add(result.Feature);
// //左鍵選單
// result.Feature.MouseLeftButtonDown += new MouseButtonEventHandler(Feature_MouseLeftButtonDown);
// result.Feature.MouseLeftButtonUp += new MouseButtonEventHandler(Feature_MouseLeftButtonUp);
// //右鍵選單
// result.Feature.MouseRightButtonDown += new MouseButtonEventHandler(Feature_MouseRightButtonDown);
// result.Feature.MouseRightButtonUp += new MouseButtonEventHandler(Feature_MouseRightButtonUp);
// }
// //座標自動定位
// ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = e.FindResults[0].Feature.Geometry.Extent;
// double expandPercentage = 30;
// double widthExpand = selectedFeatureExtent.Width * (expandPercentage / 100);
// double heightExpand = selectedFeatureExtent.Height * (expandPercentage / 100);
// ESRI.ArcGIS.Client.Geometry.Envelope displayExtent = new ESRI.ArcGIS.Client.Geometry.Envelope(
// selectedFeatureExtent.XMin - (widthExpand / 2),
// selectedFeatureExtent.YMin - (heightExpand / 2),
// selectedFeatureExtent.XMax + (widthExpand / 2),
// selectedFeatureExtent.YMax + (heightExpand / 2));
// myMap.ZoomTo(displayExtent);
// }
// else
// {
// MessageBox.Show("沒有發現匹配該搜尋的記錄!");
// }
//}
//#endregion
#region 小麥監測點圖層
/// <summary>
/// 根據條件查詢監測點圖層(0)
/// </summary>
/// <param name="conditions"></param>
public void FindGraphicsAndShowInMap(string conditions)
{
// 初始化查詢操作
FindTask findTask = new FindTask("http://192.168.2.5/arcgis/rest/services/AnHuiDynamic/MapServer/");
findTask.ExecuteCompleted += FindTask_ExecuteCompleted;
findTask.Failed += FindTask_Failed;
//初始化查詢引數,指定Name欄位作為小麥監測點層的搜素條件,並返回特徵圖層作為查詢結果
FindParameters findParameters = new FindParameters();
findParameters.LayerIds.AddRange(new int[] { 0 });
findParameters.SearchFields.AddRange(new string[] { "ID", "Name" });
findParameters.ReturnGeometry = true;
//要查詢點的資訊
findParameters.SearchText = conditions;
findTask.ExecuteAsync(findParameters);
}
#region FindTask 查詢任務開始
// 查詢結束時,開始繪製點到圖層上
private void FindTask_ExecuteCompleted(object sender, FindEventArgs args)
{
// 清除先前的圖層
GraphicsLayer graphicsLayer = myMap.Layers["MyGraphicsLayer"] as GraphicsLayer;
graphicsLayer.ClearGraphics();
// 檢查新的結果
if (args.FindResults.Count > 0)
{
//將查詢出來的結果在地圖上顯示出來
foreach (FindResult result in args.FindResults)
{
//賦值顏色值
this.dms_Point.Color = new SolidColorBrush(Colors.Red);
result.Feature.Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;
graphicsLayer.Graphics.Add(result.Feature);
//左鍵選單
result.Feature.MouseLeftButtonDown += new MouseButtonEventHandler(Feature_MouseLeftButtonDown);
result.Feature.MouseLeftButtonUp += new MouseButtonEventHandler(Feature_MouseLeftButtonUp);
//右鍵選單
result.Feature.MouseRightButtonDown += new MouseButtonEventHandler(Feature_MouseRightButtonDown);
result.Feature.MouseRightButtonUp += new MouseButtonEventHandler(Feature_MouseRightButtonUp);
}
//座標自動定位
ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = args.FindResults[0].Feature.Geometry.Extent;
double expandPercentage = 30;
double widthExpand = selectedFeatureExtent.Width * (expandPercentage / 100);
double heightExpand = selectedFeatureExtent.Height * (expandPercentage / 100);
ESRI.ArcGIS.Client.Geometry.Envelope displayExtent = new ESRI.ArcGIS.Client.Geometry.Envelope(
selectedFeatureExtent.XMin - (widthExpand / 2),
selectedFeatureExtent.YMin - (heightExpand / 2),
selectedFeatureExtent.XMax + (widthExpand / 2),
selectedFeatureExtent.YMax + (heightExpand / 2));
myMap.ZoomTo(displayExtent);
}
else
{
MessageBox.Show("沒有發現匹配該搜尋的記錄!");
}
}
//當查詢失敗時進行提示操作
private void FindTask_Failed(object sender, TaskFailedEventArgs args)
{
MessageBox.Show("查詢失敗: " + args.Error);
}
#endregion FindTask 查詢任務結束
#endregion
RichTextBox rtb;
#region 滑鼠左鍵事件開始
void Feature_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
//滑鼠左鍵,顯示ToolTip資訊
Graphic g = sender as Graphic;
//這裡需要新增一個不消失的彈出框,並可以移入進行點選
MapTips tips = new MapTips(rtb, g.Attributes["Name"].ToString().Trim(), g.Attributes["AreaID"].ToString().Trim(), "-1", "-1");
tips.Show(e.GetPosition(LayoutRoot));
}
void Feature_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
#endregion 滑鼠左鍵事件結束
#region 滑鼠右鍵事件開始
void Feature_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
Graphic g = sender as Graphic;
RTBContextMenu menu = new RTBContextMenu(rtb, g.Attributes["Name"].ToString().Trim());
menu.Show(e.GetPosition(LayoutRoot));
}
void Feature_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
#endregion 滑鼠右鍵事件結束
string _toolMode = "";
List<Envelope> _extentHistory = new List<Envelope>();
int _currentExtentIndex = 0;
bool _newExtent = true;
Image _previousExtentImage;
Image _nextExtentImage;
private Draw MyDrawObject;
private void MyToolbar_ToolbarItemClicked(object sender, ESRI.ArcGIS.Client.Toolkit.SelectedToolbarItemArgs e)
{
MyDrawObject.IsEnabled = false;
_toolMode = "";
switch (e.Index)
{
case 0: // ZoomIn Layers
MyDrawObject.IsEnabled = true;
_toolMode = "zoomin";
break;
case 1: // Zoom Out
MyDrawObject.IsEnabled = true;
_toolMode = "zoomout";
break;
case 2: // Pan
break;
case 3: // Previous Extent
if (_currentExtentIndex != 0)
{
_currentExtentIndex--;
if (_currentExtentIndex == 0)
{
_previousExtentImage.Opacity = 0.3;
_previousExtentImage.IsHitTestVisible = false;
}
_newExtent = false;
myMap.IsHitTestVisible = false;
myMap.ZoomTo(_extentHistory[_currentExtentIndex]);
if (_nextExtentImage.IsHitTestVisible == false)
{
_nextExtentImage.Opacity = 1;
_nextExtentImage.IsHitTestVisible = true;
}
}
break;
case 4: // Next Extent
if (_currentExtentIndex < _extentHistory.Count - 1)
{
_currentExtentIndex++;
if (_currentExtentIndex == (_extentHistory.Count - 1))
{
_nextExtentImage.Opacity = 0.3;
_nextExtentImage.IsHitTestVisible = false;
}
_newExtent = false;
myMap.IsHitTestVisible = false;
myMap.ZoomTo(_extentHistory[_currentExtentIndex]);
if (_previousExtentImage.IsHitTestVisible == false)
{
_previousExtentImage.Opacity = 1;
_previousExtentImage.IsHitTestVisible = true;
}
}
break;
case 5: // Full Extent
myMap.ZoomTo(myMap.Layers.GetFullExtent());
break;
case 6: // Full Screen
Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;
break;
}
}
private void myDrawObject_DrawComplete(object sender, DrawEventArgs args)
{
if (_toolMode == "zoomin")
{
myMap.ZoomTo(args.Geometry as ESRI.ArcGIS.Client.Geometry.Envelope);
}
else if (_toolMode == "zoomout")
{
Envelope currentExtent = myMap.Extent;
Envelope zoomBoxExtent = args.Geometry as Envelope;
MapPoint zoomBoxCenter = zoomBoxExtent.GetCenter();
double whRatioCurrent = currentExtent.Width / currentExtent.Height;
double whRatioZoomBox = zoomBoxExtent.Width / zoomBoxExtent.Height;
Envelope newEnv = null;
if (whRatioZoomBox > whRatioCurrent)
// use width
{
double mapWidthPixels = myMap.Width;
double multiplier = currentExtent.Width / zoomBoxExtent.Width;
double newWidthMapUnits = currentExtent.Width * multiplier;
newEnv = new Envelope(new MapPoint(zoomBoxCenter.X - (newWidthMapUnits / 2), zoomBoxCenter.Y),
new MapPoint(zoomBoxCenter.X + (newWidthMapUnits / 2), zoomBoxCenter.Y));
}
else
// use height
{
double mapHeightPixels = myMap.Height;
double multiplier = currentExtent.Height / zoomBoxExtent.Height;
double newHeightMapUnits = currentExtent.Height * multiplier;
newEnv = new Envelope(new MapPoint(zoomBoxCenter.X, zoomBoxCenter.Y - (newHeightMapUnits / 2)),
new MapPoint(zoomBoxCenter.X, zoomBoxCenter.Y + (newHeightMapUnits / 2)));
}
if (newEnv != null)
myMap.ZoomTo(newEnv);
}
}
private void MyMap_ExtentChanged(object sender, ExtentEventArgs e)
{
if (e.OldExtent == null)
{
_extentHistory.Add(e.NewExtent.Clone());
return;
}
if (_newExtent)
{
_currentExtentIndex++;
if (_extentHistory.Count - _currentExtentIndex > 0)
_extentHistory.RemoveRange(_currentExtentIndex, (_extentHistory.Count - _currentExtentIndex));
if (_nextExtentImage.IsHitTestVisible == true)
{
_nextExtentImage.Opacity = 0.3;
_nextExtentImage.IsHitTestVisible = false;
}
_extentHistory.Add(e.NewExtent.Clone());
if (_previousExtentImage.IsHitTestVisible == false)
{
_previousExtentImage.Opacity = 1;
_previousExtentImage.IsHitTestVisible = true;
}
}
else
{
myMap.IsHitTestVisible = true;
_newExtent = true;
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (this.textBox1.Text == "")
{
FindGraphicsAndShowInMap("0");
}
else
{
FindGraphicsAndShowInMap(this.textBox1.Text.Trim());
}
}
}
}
效果圖如下:滑鼠點選後彈出窗體,及滑鼠右鍵彈出快捷選單,如下:
以後繼續完善,不斷改進。
===========================================================================
如果覺得對您有幫助,微信掃一掃支援一下:
相關文章
- GridView滑鼠經過感知以及點選行彈出視窗View
- 語音交友app開發,點選按鈕出現彈窗的實現方式APP
- win10右鍵選單彈出方向怎麼自定義_win10如何自定義右鍵選單彈出方向Win10
- 獲取滑鼠左鍵點選 creator 3.8
- jQuery點選小圖彈出大圖jQuery
- 直播系統程式碼,點選選擇欄,彈出各個選項
- 表格單元格點選操作(彈窗)
- 短視訊系統原始碼,點選選擇框,底部彈出可以選擇的選項原始碼
- 短視訊平臺開發,點選輸入框時自動彈出軟鍵盤
- 點選彈出居中登陸框
- win10右鍵選單出現左邊如何恢復到右邊_win10右鍵選單在左邊怎麼改回右邊Win10
- 直播原始碼網站,點選分類調起選單欄並彈出原始碼網站
- JavaScript點選按鈕彈出層效果JavaScript
- 滑鼠點選區域外 彈框隱藏
- 沒有滑鼠Mac怎麼調出右鍵選單Mac
- win10右鍵選單顯示在左邊怎麼辦 win10滑鼠右鍵出現在左邊如何恢復Win10
- Qt右鍵選單實現QT
- win10系統下滑鼠右鍵無法彈出選單沒反應如何處理Win10
- win10右健彈出很慢如何解決_win10右鍵選單彈出非常慢怎麼處理Win10
- ArcGIS實現打點、線路圖、色塊、自定義彈窗
- 如何不使用js實現滑鼠hover彈出選單效果JS
- 彈彈彈,彈走魚尾紋的彈出選單(vue)Vue
- checkbox及css實現點選下拉選單CSS
- win10滑鼠右鍵選單欄怎麼改 刪除右鍵選單欄無用選項的方法Win10
- Silverlight實用竅門系列:4.Silverlight 4.0新增滑鼠右鍵選單和Silverlight全屏模式的進入退出。【附帶原始碼例項】...模式原始碼
- alacritty 新增左鍵選擇,右鍵複製
- .滑鼠點選愛心特效的實現特效
- win10快捷方式點選彈出屬性介面怎麼解決Win10
- 點選就能設計出活動海拔的方法,線上網頁一鍵出圖!網頁
- windows滑鼠右鍵選單新增檔案-開啟方式Windows
- 管理右鍵選單
- javascript右鍵選單JavaScript
- winform 跨視窗點選ORM
- 滑鼠右鍵選單欄東西太多怎麼辦 右鍵選單怎麼編輯調整
- 點選彈出居中使用者登入框效果
- android短影片開發,點選兩次實現不同點選效果的實現方式Android
- win10滑鼠右鍵沒反應怎麼處理 修復右鍵點選桌面沒東西的方法Win10
- 利用transform實現一個純CSS彈出選單ORMCSS
- 點選底部input輸入框,彈出的軟鍵盤擋住input(蘋果手機使用第三蘋果