绘制点线面以及符号界面设计(全部代码)
一、MainWindow 主窗体
1.界面设计代码
<Window x:Class="Test3.MainWindow"
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/runtime/2013"
xmlns:local="clr-namespace:Test3"
mc:Ignorable="d"
Title="MainWindow" Height="525" Width="790" Loaded="Window_Loaded">
<Window.Resources>
<local:MapViewModel x:Key="MapViewModel"/>
</Window.Resources>
<Grid>
<esri:MapView x:Name="myMapView" Map="{Binding Map, Source={StaticResource MapViewModel}}" MouseLeftButtonDown="myMapView_MouseLeftButtonDown" MouseRightButtonDown="myMapView_MouseRightButtonDown"/>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Height="172" Width="125" Margin="658,0,0,0">
<Button x:Name="AddLayer" Click="AddLayerBtn_Click" Content="Add Layer" Background="GreenYellow"/>
<Button x:Name="DrawPoint" Click="DrawPointBtn_Click" Content="Draw Point" Background="GreenYellow"/>
<Button x:Name="DrawLine" Click="DrawLineBtn_Click" Content="Draw Line" Background="GreenYellow"/>
<Button x:Name="DrawPolygon" Click="DrawPolygonBtn_Click" Content="Draw Polygon" Background="GreenYellow"/>
<Button x:Name="Return" Click="Return_Click" Content="Return" Background="AliceBlue"/>
<Button x:Name="Clear" Click="Clear_Click" Content="Clear" Background="AliceBlue"/>
<Button x:Name="ClearAll" Click="clearAllBtn_Click" Content="Clear All" Background="AliceBlue"/>
<Button x:Name="Options" Click="Options_Click" Content="Options" Background="PaleGreen"/>
</StackPanel>
</Grid>
</Window>
2.C#代码
using Esri.ArcGISRuntime.Data;
using Esri.ArcGISRuntime.Geometry;
using Esri.ArcGISRuntime.Mapping;
using Esri.ArcGISRuntime.Symbology;
using Esri.ArcGISRuntime.UI;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Input;
namespace Test3
{
enum DrawType
{
None,
DrawPoint,
DrawLine,
DrawArea
};
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
// 定义变量
private SimpleMarkerSymbol pointSymbol;
private SimpleLineSymbol lineSymbol;
private SimpleFillSymbol fillSymbol;
private DrawType drawingType;
private PointCollection linePoints;
private List<Graphic> linesList;
private List<Graphic> polygonList;
public MainWindow()
{
InitializeComponent();
// 赋值变量
pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Diamond, System.Drawing.Color.Blue, 10.0);
lineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Red, 1.0);
fillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.DiagonalCross, System.Drawing.Color.Yellow, new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.YellowGreen, 1.0));
drawingType = DrawType.None;
linePoints = new Esri.ArcGISRuntime.Geometry.PointCollection(new SpatialReference(3857));
linesList = new List<Graphic>();
polygonList = new List<Graphic>();
}
//为 MainWindow 的 Loaded 事件处理添加代码
private void Window_Loaded(object sender, RoutedEventArgs e)
{
GraphicsOverlay graphicLayer = new GraphicsOverlay();
myMapView.GraphicsOverlays.Add(graphicLayer);
}
//为“Add Layer”按钮点击事件处理添加代码
private async void AddLayerBtn_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "打开Shapefile文件";
ofd.Filter = "Shapefile文件(*.shp)|*.shp";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
String filePath = ofd.FileName;
ShapefileFeatureTable shpFT = await ShapefileFeatureTable.OpenAsync(filePath);
FeatureLayer ftLayer = new FeatureLayer(shpFT);
myMapView.Map.OperationalLayers.Add(ftLayer);
await myMapView.SetViewpointGeometryAsync(ftLayer.FullExtent);
}
}
//为“Draw Point”按钮点击事件处理添加代码
private void DrawPointBtn_Click(object sender, RoutedEventArgs e)
{
drawingType = DrawType.DrawPoint;
}
//为“Draw Line”按钮点击事件处理添加代码
private void DrawLineBtn_Click(object sender, RoutedEventArgs e)
{
drawingType = DrawType.DrawLine;
linePoints.Clear();
}
//为“Draw Polygon”按钮点击事件处理添加代码
private void DrawPolygonBtn_Click(object sender, RoutedEventArgs e)
{
drawingType = DrawType.DrawArea;
linePoints.Clear();
}
//为“Return”按钮点击事件处理添加代码
private void Return_Click(object sender, RoutedEventArgs e)
{
if (drawingType == DrawType.DrawLine)
{
if (linePoints.Count > 2)
{
linePoints.RemoveAt(linePoints.Count - 1);
Graphic curGraphic = linesList[linesList.Count - 1];
myMapView.GraphicsOverlays[0].Graphics.Remove(curGraphic);
linesList.Remove(curGraphic);
Polyline line = new Polyline(linePoints);
Graphic lineGraphic = new Graphic(line, lineSymbol);
myMapView.GraphicsOverlays[0].Graphics.Add(lineGraphic);
linesList.Add(lineGraphic);
}
}
else if (drawingType == DrawType.DrawArea)
{
if (linePoints.Count > 3)
{
linePoints.RemoveAt(linePoints.Count - 1);
Graphic curGraphic = polygonList[polygonList.Count - 1];
myMapView.GraphicsOverlays[0].Graphics.Remove(curGraphic);
polygonList.Remove(curGraphic);
Polygon polygon = new Polygon(linePoints);
Graphic polygonGraphic = new Graphic(polygon, fillSymbol);
myMapView.GraphicsOverlays[0].Graphics.Add(polygonGraphic);
polygonList.Add(polygonGraphic);
}
}
}
//为“Clear”按钮点击事件处理添加代码
private void Clear_Click(object sender, RoutedEventArgs e)
{
int index = myMapView.GraphicsOverlays[0].Graphics.Count;
if (index > 0)
myMapView.GraphicsOverlays[0].Graphics.RemoveAt(index - 1);
linePoints.Clear();
}
//为“Clear All”按钮点击事件处理添加代码
private void clearAllBtn_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult vr = System.Windows.MessageBox.Show("确定清除全部图层?(●__●)", "操作提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (vr == MessageBoxResult.OK)
{
myMapView.GraphicsOverlays[0].Graphics.Clear();
linePoints.Clear();
}
}
//画线图形
private void draw_Line()
{
if (linePoints.Count >= 2)
{
if (linesList.Count > 0 && linePoints.Count > 2)
{
Graphic curGraphic = linesList[linesList.Count - 1];
myMapView.GraphicsOverlays[0].Graphics.Remove(curGraphic);
linesList.Remove(curGraphic);
}
Polyline line = new Polyline(linePoints);
Graphic lineGraphic = new Graphic(line, lineSymbol);
myMapView.GraphicsOverlays[0].Graphics.Add(lineGraphic);
linesList.Add(lineGraphic);
}
}
//画面图形
private void draw_Polygon()
{
if (linePoints.Count >= 3)
{
if (polygonList.Count > 0 && linePoints.Count > 3)
{
Graphic curGraphic = polygonList[polygonList.Count - 1];
myMapView.GraphicsOverlays[0].Graphics.Remove(curGraphic);
polygonList.Remove(curGraphic);
}
Polygon polygon = new Polygon(linePoints);
Graphic polygonGraphic = new Graphic(polygon, fillSymbol);
myMapView.GraphicsOverlays[0].Graphics.Add(polygonGraphic);
polygonList.Add(polygonGraphic);
}
}
//为 MapView 的 MouseLeftButtonDown 事件处理添加代码
private void myMapView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
IInputElement mv = (IInputElement)sender;
MapPoint location = myMapView.ScreenToLocation(e.GetPosition(mv));
if (drawingType == DrawType.DrawPoint)
{
Graphic gPT = new Graphic(location, pointSymbol);
myMapView.GraphicsOverlays[0].Graphics.Add(gPT);
}
else if (drawingType == DrawType.DrawLine)
{
linePoints.Add(location);
draw_Line();
}
else if (drawingType == DrawType.DrawArea)
{
linePoints.Add(location);
draw_Polygon();
}
}
//为 MapView 的 MouseRightButtonDown 事件处理添加代码
private void myMapView_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
drawingType = DrawType.None;
}
//展示窗体
private void Options_Click(object sender, RoutedEventArgs e)
{
OptionsWindows sForm = new OptionsWindows();
sForm.PointSymbol = pointSymbol;
sForm.LineSymbol = lineSymbol;
sForm.FillSymbol = fillSymbol;
sForm.ShowDialog();
}
}
}
3.界面展示
二、OptionsWindows
窗体
1.界面设计代码
<Window x:Class="Test3.OptionsWindows"
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:Test3"
mc:Ignorable="d"
Title="OptionsWindows" Height="258.667" Width="250" Loaded="Window_Loaded">
<Grid Margin="0,0,0.333,-29.333">
<TabControl HorizontalAlignment="Left" Height="230" VerticalAlignment="Top" Width="250">
<TabItem Loaded="PointPropertyTab_Loaded" Header="点符号">
<Grid Background="#FFE5E5E5">
<Label Content="样式:" Margin="10,0,180,172.667"></Label>
<Label x:Name="sizeLabel" Margin="116,0,45,172.667"></Label>
<Label Content="颜色:" Margin="116,57,74,115.667"></Label>
<Slider x:Name="sizeSlider" ValueChanged="sizeSlider_ValueChanged" Margin="100,30,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="130" ></Slider>
<Label x:Name="colorLabel" MouseDoubleClick="colorLabel_MouseDoubleClick" Margin="100,90,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Height="20" Width="130" Background="White"></Label>
<Button Content="OK" Click="OKBtn_Click" HorizontalAlignment="Right" Background="Aquamarine" VerticalAlignment="Top" Height="20" Width="50" Margin="0,114,14,0"></Button>
<Button Content="Apply" Click="ApplyBtn_Click" HorizontalAlignment="Right" Background="Aquamarine" VerticalAlignment="Top" Height="20" Width="50" Margin="0,144,14,0"></Button>
<Button Content="Cancel" Click="CancelBtn_Click" HorizontalAlignment="Right" Background="Aquamarine" VerticalAlignment="Top" Height="20" Width="50" Margin="0,174,14,0"></Button>
<RadioButton x:Name="radioButton1" Click="radioButton1_Checked" Content="Circle" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,30,0,0"/>
<RadioButton x:Name="radioButton2" Click="radioButton2_Checked" Content="Cross" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,60,0,0"/>
<RadioButton x:Name="radioButton3" Click="radioButton3_Checked" Content="Diamond" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,90,0,0"/>
<RadioButton x:Name="radioButton4" Click="radioButton4_Checked" Content="Square" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,120,0,0"/>
<RadioButton x:Name="radioButton5" Click="radioButton5_Checked" Content="X" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,150,0,0"/>
<RadioButton x:Name="radioButton6" Click="radioButton6_Checked" Content="Triangle" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,180,0,0"/>
</Grid>
</TabItem>
<TabItem Loaded="linePropertyTab_Loaded" Header="线符号">
<Grid Background="#FFE5E5E5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="13*"/>
<ColumnDefinition Width="109*"/>
</Grid.ColumnDefinitions>
<Label Content="样式:" Margin="10,0,180,172.667" Grid.ColumnSpan="2"></Label>
<ComboBox x:Name="lineStyleCombobox" SelectionChanged="lineStyleCombobox_SelectionChanged" HorizontalAlignment="Left" VerticalAlignment="Top" Width="220" Height="20" Margin="10,30,0,0" Grid.ColumnSpan="2">
<ComboBoxItem Content="Solid">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LSolid.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="Dashed">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDash.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="Dotted">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDot.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="DashDot">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDashDot.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="DashDotDot">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDashDotDot.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
</ComboBox>
<Label x:Name="lineSizeLabel" Margin="10,50,116,122.667" Grid.ColumnSpan="2"></Label>
<Slider x:Name="lineWidthSlider" ValueChanged="lineWidthSlider_ValueChanged" HorizontalAlignment="Left" VerticalAlignment="Top" Height="30" Width="220" Margin="10,80,0,0" Grid.ColumnSpan="2"/>
<Label Content="颜色:" Margin="10,130,180,42.667" Grid.ColumnSpan="2"></Label>
<Rectangle x:Name="lineColorRectangle" MouseDown="LineColorRectangle_MouseDown" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="30" Stroke="Black" VerticalAlignment="Top" Width="181" Margin="23.167,130,0,0" Grid.Column="1"/>
<Button Content="OK" Click="lineOKBtn_Click" HorizontalAlignment="Right" Background="Aquamarine" VerticalAlignment="Top" Height="20" Width="50" Margin="0,175,180,0" Grid.ColumnSpan="2"></Button>
<Button Content="Apply" Click="lineApplyBtn_Click" HorizontalAlignment="Right" Background="Aquamarine" VerticalAlignment="Top" Height="20" Width="50" Margin="0,175,100,0" Grid.Column="1"></Button>
<Button Content="Cancel" Click="lineCancelBtn_Click" HorizontalAlignment="Right" Background="Aquamarine" VerticalAlignment="Top" Height="20" Width="50" Margin="0,175,20,0" Grid.Column="1"></Button>
</Grid>
</TabItem>
<TabItem Loaded="fillPropertyTab_Loaded" Header="面符号">
<Grid Background="#FFE5E5E5">
<!--Resources="{Binding Path=D:\桌面\GIS软件开发\图标Source}"-->
<Label Margin="10,3,165,175.667" Panel.ZIndex="10">样式:</Label>
<ListBox x:Name="fillStyleListBox" SelectionChanged="fillStyleListBox_SelectionChanged" HorizontalAlignment="Left" FontSize="6" Height="100" VerticalAlignment="Top" Width="100" Margin="10,35,0,0">
<ListBoxItem x:Name="ListBoxItem1" Content="DiagonalCross" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FDialog2.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem2" Content="Horizontal" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FHori.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem3" Content="Null" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FNo.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem4" Content="Vertical" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FVer.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem5" Content="Solid" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FSolid.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem6" Content="Cross" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FVerHori.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem7" Content="ForwardDiagonal" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FXie.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
<ListBoxItem x:Name="ListBoxItem8" Content="BackwardDiagonal" Width="80" Height="20" HorizontalAlignment="Left">
<ListBoxItem.Background>
<ImageBrush ImageSource="Image/FXie2.png" Stretch="Uniform"/>
</ListBoxItem.Background>
</ListBoxItem>
</ListBox>
<CheckBox x:Name="outlineCheckBox" Content="边界线" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,10,0,0"/>
<Label Margin="125,35,50,143.667" Panel.ZIndex="10">边界线样式:</Label>
<Border x:Name="outlineBorder" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="96" Margin="120,35,0,0">
<ComboBox x:Name="outlineStyleComboBox" SelectionChanged="outlineStyleComoBoxBox_SelectionChanged" FontSize="5" Margin="8.667,20.667,9.333,57.333">
<ComboBoxItem Content="Solid" Height="15">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LSolid.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="Dash" Height="15">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDash.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="Dot" Height="15">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDot.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="DashDot" Height="15">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDashDot.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
<ComboBoxItem Content="DashDotDot" Height="15">
<ComboBoxItem.Background>
<ImageBrush ImageSource="Image/LDashDotDot.png"/>
</ComboBoxItem.Background>
</ComboBoxItem>
</ComboBox>
</Border>
<Label Margin="125,85,81,93.667" Panel.ZIndex="10">宽度:</Label>
<TextBox x:Name="outlineTextBox" TextChanged="OutlineTextBox_TextChanged" TextWrapping="Wrap" Margin="163,92,38,95.667"/>
<Label Margin="125,109,81,69.667" Panel.ZIndex="10">颜色:</Label>
<Rectangle x:Name="outlineColorRectangle" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="15" Stroke="Black" VerticalAlignment="Top" Width="43" Margin="163,116,0,0" MouseDown="OutlineColorRectangle_MouseDown"/>
<Label Margin="10,140,165,38.667" Panel.ZIndex="10">填充颜色:</Label>
<Canvas x:Name="fillColorCanvas" MouseDown="colorCanvas_MouseDown" HorizontalAlignment="Left" Height="19" Background="White" VerticalAlignment="Top" Width="146" Margin="69,144,0,0"/>
<Button x:Name="fillOKBtn" Click="fillOKBtn_Click" Content="OK" HorizontalAlignment="Left" VerticalAlignment="Top" Width="60" Height="25" Margin="10,173,0,0"/>
<Button x:Name="fillApplyBtn" Click="fillApplyBtn_Click" Content="Apply" HorizontalAlignment="Left" VerticalAlignment="Top" Width="60" Height="25" Margin="82,173,0,0"/>
<Button x:Name="fillCancelBtn" Click="fillCancelBtn_Click" Content="Cancel" HorizontalAlignment="Left" VerticalAlignment="Top" Width="60" Height="25" Margin="156,173,0,0"/>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>
2.C#代码
using Esri.ArcGISRuntime.Symbology;
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Test3
{
/// <summary>
/// Window1.xaml 的交互逻辑
/// </summary>
public partial class OptionsWindows : Window
{
private SimpleMarkerSymbol pointSymbol;
private System.Drawing.Color pointColor;
private SimpleMarkerSymbolStyle pointStyle;
private double pointSize;
private SimpleLineSymbol lineSymbol;
private System.Drawing.Color lineColor;
private SimpleLineSymbolStyle lineStyle;
private double lineSize;
private SimpleFillSymbol fillSymbol;
private SimpleLineSymbol outlineSymbol;
private System.Drawing.Color fillColor;
private SimpleFillSymbolStyle fillStyle;
private System.Drawing.Color outlineColor;
private SimpleLineSymbolStyle outlineStyle;
private double outlineSize;
//初始化
public OptionsWindows()
{
InitializeComponent();
}
//为“pointSymbol”、“lineSymbol”、“fillSymbol”三个成员添加属性
public SimpleMarkerSymbol PointSymbol
{
get
{
return pointSymbol;
}
set
{
pointSymbol = value;
}
}
public SimpleLineSymbol LineSymbol
{
get
{
return lineSymbol;
}
set
{
lineSymbol = value;
}
}
public SimpleFillSymbol FillSymbol
{
get
{
return fillSymbol;
}
set
{
fillSymbol = value;
}
}
/*窗体设置*/
//为窗体的 Loaded 事件添加代码,主要是获取另一个窗口里的控件属性设置
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (pointSymbol != null)
{
pointColor = pointSymbol.Color;
pointStyle = pointSymbol.Style;
pointSize = pointSymbol.Size;
}
if (lineSymbol != null)
{
lineColor = lineSymbol.Color;
lineStyle = lineSymbol.Style;
lineSize = lineSymbol.Width;
}
if (fillSymbol != null)
{
fillColor = fillSymbol.Color;
fillStyle = fillSymbol.Style;
if (fillSymbol.Outline != null)
{
outlineSymbol = (SimpleLineSymbol)fillSymbol.Outline;
outlineCheckBox.IsChecked = true;
outlineBorder.Visibility = Visibility.Visible;
}
else
{
outlineSymbol = null;
outlineCheckBox.IsChecked = false;
outlineBorder.Visibility = Visibility.Collapsed;
}
outlineColor = outlineSymbol.Color;
outlineStyle = outlineSymbol.Style;
outlineSize = outlineSymbol.Width;
}
}
/*点符号设置*/
//为“点符号”tab 页的 Loaded 事件添加代码
private void PointPropertyTab_Loaded(object sender, RoutedEventArgs e)
{
switch (pointStyle)
{
case SimpleMarkerSymbolStyle.Cross:
radioButton1.IsChecked = true;
break;
case SimpleMarkerSymbolStyle.Diamond:
radioButton2.IsChecked = true;
break;
case SimpleMarkerSymbolStyle.Square:
radioButton3.IsChecked = true;
break;
case SimpleMarkerSymbolStyle.X:
radioButton4.IsChecked = true;
break;
case SimpleMarkerSymbolStyle.Triangle:
radioButton5.IsChecked = true;
break;
case SimpleMarkerSymbolStyle.Circle:
radioButton6.IsChecked = true;
break;
}
sizeSlider.Value = pointSize / 10;
Color c = Color.FromArgb(pointColor.A, pointColor.R, pointColor.G, pointColor.B);
colorLabel.Background = new SolidColorBrush(c);
}
//为“点符号”tab 页中的 radiobutton 的 checked 事件添加代码
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
pointStyle = SimpleMarkerSymbolStyle.Circle;
}
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
pointStyle = SimpleMarkerSymbolStyle.Cross;
}
private void radioButton3_Checked(object sender, RoutedEventArgs e)
{
pointStyle = SimpleMarkerSymbolStyle.Diamond;
}
private void radioButton4_Checked(object sender, RoutedEventArgs e)
{
pointStyle = SimpleMarkerSymbolStyle.Square;
}
private void radioButton5_Checked(object sender, RoutedEventArgs e)
{
pointStyle = SimpleMarkerSymbolStyle.X;
}
private void radioButton6_Checked(object sender, RoutedEventArgs e)
{
pointStyle = SimpleMarkerSymbolStyle.Triangle;
}
//为“点符号”tab 页的 silder 控件的 ValueChanged 事件添加代码
private void sizeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
double v = e.NewValue;
sizeLabel.Content = "大小:" + v.ToString();
pointSize = v * 10;
}
//为“点符号”tab 页的颜色 label 控件的 MouseDoubleClick 事件添加代码,设置颜色
private void colorLabel_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
System.Windows.Forms.ColorDialog clrDlg = new System.Windows.Forms.ColorDialog();
SolidColorBrush s = (SolidColorBrush)colorLabel.Background;
clrDlg.Color = System.Drawing.Color.FromArgb(s.Color.A, s.Color.R, s.Color.G, s.Color.B);
if (clrDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
pointColor = clrDlg.Color;
Color c = Color.FromArgb(pointColor.A, pointColor.R, pointColor.G, pointColor.B);
colorLabel.Background = new SolidColorBrush(c);
}
}
//为“点符号”tab 页中的三个 button 的点击事件添加代码
private void OKBtn_Click(object sender, RoutedEventArgs e)
{
pointSymbol.Color = pointColor;
pointSymbol.Style = pointStyle;
pointSymbol.Size = pointSize;
this.Close();
//this.DialogResult = true;
}
private void CancelBtn_Click(object sender, RoutedEventArgs e)
{
this.Close();
//this.DialogResult = false;
}
private void ApplyBtn_Click(object sender, RoutedEventArgs e)
{
pointSymbol.Color = pointColor;
pointSymbol.Style = pointStyle;
pointSymbol.Size = pointSize;
}
/*线符号设置*/
//为“线符号”tab 页的 Loaded 事件添加代码
private void linePropertyTab_Loaded(object sender, RoutedEventArgs e)
{
switch (lineStyle)
{
case SimpleLineSymbolStyle.Solid:
lineStyleCombobox.SelectedIndex = 0;
break;
case SimpleLineSymbolStyle.Dash:
lineStyleCombobox.SelectedIndex = 1;
break;
case SimpleLineSymbolStyle.Dot:
lineStyleCombobox.SelectedIndex = 2;
break;
case SimpleLineSymbolStyle.DashDot:
lineStyleCombobox.SelectedIndex = 3;
break;
case SimpleLineSymbolStyle.DashDotDot:
lineStyleCombobox.SelectedIndex = 4;
break;
case SimpleLineSymbolStyle.Null:
lineStyleCombobox.SelectedIndex = -1;
break;
}
lineWidthSlider.Value = lineSize;
Color curColor = Color.FromArgb(lineColor.A, lineColor.R, lineColor.G, lineColor.B);
lineColorRectangle.Fill = new SolidColorBrush(curColor);
}
//为“线符号”tab 页中的 combobox 控件添加 SelectionChanged 事件添加代码
private void lineStyleCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int index = lineStyleCombobox.SelectedIndex;
switch (index)
{
case 0:
lineStyle = SimpleLineSymbolStyle.Solid;
break;
case 1:
lineStyle = SimpleLineSymbolStyle.Dash;
break;
case 2:
lineStyle = SimpleLineSymbolStyle.Dot;
break;
case 3:
lineStyle = SimpleLineSymbolStyle.DashDot;
break;
case 4:
lineStyle = SimpleLineSymbolStyle.DashDotDot;
break;
default:
lineStyle = SimpleLineSymbolStyle.Null;
break;
}
}
//为“线符号”tab 页中的 slider 控件的 ValueChanged 事件添加代码
private void lineWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
lineSize = e.NewValue;
lineSizeLabel.Content = "宽度:" + lineSize.ToString();
}
//为“线符号”tab 页中的 Rectangle 控件的 MouseDown 事件添加代码,设置填充颜色
private void LineColorRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
System.Windows.Forms.ColorDialog clrDlg = new System.Windows.Forms.ColorDialog();
SolidColorBrush br = (SolidColorBrush)lineColorRectangle.Fill;
clrDlg.Color = System.Drawing.Color.FromArgb(br.Color.A, br.Color.R, br.Color.G, br.Color.B);
if (clrDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Color selColor = Color.FromArgb(clrDlg.Color.A, clrDlg.Color.R, clrDlg.Color.G, clrDlg.Color.B);
lineColorRectangle.Fill = new SolidColorBrush(selColor);
lineColor = clrDlg.Color;
}
}
}
//为“线符号”tab 页中的三个按钮添加点击事件处理代码
private void lineOKBtn_Click(object sender, RoutedEventArgs e)
{
LineSymbol.Style = lineStyle;
LineSymbol.Color = lineColor;
LineSymbol.Width = lineSize;
this.Close();
//this.DialogResult = true;
}
private void lineCancelBtn_Click(object sender, RoutedEventArgs e)
{
this.Close();
//this.DialogResult = false;
}
private void lineApplyBtn_Click(object sender, RoutedEventArgs e)
{
LineSymbol.Style = lineStyle;
LineSymbol.Color = lineColor;
LineSymbol.Width = lineSize;
}
/*面符号设置*/
//为“面符号”tab 页的 Loaded 事件添加代码
private void fillPropertyTab_Loaded(object sender, RoutedEventArgs e)
{
switch (fillStyle)
{
case SimpleFillSymbolStyle.DiagonalCross:
fillStyleListBox.SelectedIndex = 0;
break;
case SimpleFillSymbolStyle.Horizontal:
fillStyleListBox.SelectedIndex = 1;
break;
case SimpleFillSymbolStyle.Null:
fillStyleListBox.SelectedIndex = 2;
break;
case SimpleFillSymbolStyle.Vertical:
fillStyleListBox.SelectedIndex = 3;
break;
case SimpleFillSymbolStyle.Solid:
fillStyleListBox.SelectedIndex = 4;
break;
case SimpleFillSymbolStyle.Cross:
fillStyleListBox.SelectedIndex = 5;
break;
case SimpleFillSymbolStyle.ForwardDiagonal:
fillStyleListBox.SelectedIndex = 6;
break;
case SimpleFillSymbolStyle.BackwardDiagonal:
fillStyleListBox.SelectedIndex = 7;
break;
}
if (outlineCheckBox.IsChecked == true)
{
switch (outlineStyle)
{
case SimpleLineSymbolStyle.Solid:
outlineStyleComboBox.SelectedIndex = 0;
break;
case SimpleLineSymbolStyle.Dash:
outlineStyleComboBox.SelectedIndex = 1;
break;
case SimpleLineSymbolStyle.Dot:
outlineStyleComboBox.SelectedIndex = 2;
break;
case SimpleLineSymbolStyle.DashDot:
outlineStyleComboBox.SelectedIndex = 3;
break;
case SimpleLineSymbolStyle.DashDotDot:
outlineStyleComboBox.SelectedIndex = 4;
break;
case SimpleLineSymbolStyle.Null:
outlineStyleComboBox.SelectedIndex = -1;
break;
}
outlineTextBox.Text = outlineSize.ToString();
Color vr = Color.FromArgb(outlineColor.A, outlineColor.R, outlineColor.G, outlineColor.B);
outlineColorRectangle.Fill = new SolidColorBrush(vr);
Color vc = Color.FromArgb(fillColor.A, fillColor.R, fillColor.G, fillColor.B);
fillColorCanvas.Background = new SolidColorBrush(vc);
}
}
//为“面符号”tab 页中的 combobox 控件添加 SelectionChanged 事件添加代码,设置图形填充样式
private void fillStyleListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int index = fillStyleListBox.SelectedIndex;
switch (index)
{
case 0:
fillStyle = SimpleFillSymbolStyle.DiagonalCross;
break;
case 1:
fillStyle = SimpleFillSymbolStyle.Horizontal;
break;
case 2:
fillStyle = SimpleFillSymbolStyle.Null;
break;
case 3:
fillStyle = SimpleFillSymbolStyle.Vertical;
break;
case 4:
fillStyle = SimpleFillSymbolStyle.Solid;
break;
case 5:
fillStyle = SimpleFillSymbolStyle.Cross;
break;
case 6:
fillStyle = SimpleFillSymbolStyle.ForwardDiagonal;
break;
case 7:
fillStyle = SimpleFillSymbolStyle.BackwardDiagonal;
break;
default:
fillStyle = SimpleFillSymbolStyle.Null;
break;
}
}
//为“面符号”tab 页中的 combobox 控件添加 SelectionChanged 事件添加代码,设置边框线样式
private void outlineStyleComoBoxBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int index = outlineStyleComboBox.SelectedIndex;
switch (index)
{
case 0:
outlineStyle = SimpleLineSymbolStyle.Solid;
break;
case 1:
outlineStyle = SimpleLineSymbolStyle.Dash;
break;
case 2:
outlineStyle = SimpleLineSymbolStyle.Dot;
break;
case 3:
outlineStyle = SimpleLineSymbolStyle.DashDot;
break;
case 4:
outlineStyle = SimpleLineSymbolStyle.DashDotDot;
break;
default:
outlineStyle = SimpleLineSymbolStyle.Null;
break;
}
}
//为“面符号”tab 页中的 TextBox 控件的 TextChanged 事件添加代码,设置边框线大小
private void OutlineTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
outlineSize = Convert.ToInt32(outlineTextBox.Text);
}
//为“面符号”tab 页中的 Rectangle 控件的 MouseDown 事件添加代码,设置边框线颜色
private void OutlineColorRectangle_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
System.Windows.Forms.ColorDialog clrDlg = new System.Windows.Forms.ColorDialog();
SolidColorBrush br = (SolidColorBrush)outlineColorRectangle.Fill;
clrDlg.Color = System.Drawing.Color.FromArgb(br.Color.A, br.Color.R, br.Color.G, br.Color.B);
if (clrDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Color selColor = Color.FromArgb(clrDlg.Color.A, clrDlg.Color.R, clrDlg.Color.G, clrDlg.Color.B);
outlineColorRectangle.Fill = new SolidColorBrush(selColor);
outlineColor = clrDlg.Color;
}
}
}
//为“面符号”tab 页中的 Rectangle 控件的 MouseDown 事件添加代码,设置填充颜色
private void colorCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 2)
{
System.Windows.Forms.ColorDialog clrDlg = new System.Windows.Forms.ColorDialog();
SolidColorBrush br = (SolidColorBrush)fillColorCanvas.Background;
clrDlg.Color = System.Drawing.Color.FromArgb(br.Color.A, br.Color.R, br.Color.G, br.Color.B);
if (clrDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Color selColor = Color.FromArgb(clrDlg.Color.A, clrDlg.Color.R, clrDlg.Color.G, clrDlg.Color.B);
fillColorCanvas.Background = new SolidColorBrush(selColor);
fillColor = clrDlg.Color;
}
}
}
//为“面符号”tab 页中的三个按钮添加点击事件处理代码
private void fillOKBtn_Click(object sender, RoutedEventArgs e)
{
if (outlineCheckBox.IsChecked == true)
{
outlineSymbol = new SimpleLineSymbol(outlineStyle, outlineColor, outlineSize);
}
else
{
outlineSymbol = null;
}
FillSymbol.Style = fillStyle;
FillSymbol.Color = fillColor;
FillSymbol.Outline = outlineSymbol;
this.Close();
//this.DialogResult = true;
}
private void fillCancelBtn_Click(object sender, RoutedEventArgs e)
{
this.Close();
//this.DialogResult = false;
}
private void fillApplyBtn_Click(object sender, RoutedEventArgs e)
{
if (outlineCheckBox.IsChecked == true)
{
outlineSymbol = new SimpleLineSymbol(outlineStyle, outlineColor, outlineSize);
}
else
{
outlineSymbol = null;
}
FillSymbol.Style = fillStyle;
FillSymbol.Color = fillColor;
FillSymbol.Outline = outlineSymbol;
}
}
}
3.界面展示
点符号
线符号
面符号
三、其它
如果是直接复制本带码运行,您需要注意以下几个事项:
1.线符号和面填充符号的图片资源
如何添加?
① 新建文件夹命名为Image
② 添加现有项
③ 选择对应图片
没有图片资源怎么办?
那就直接删除所有有引用图片的xaml代码即可,这对代码实现不影响的!
<ImageBrush ImageSource="Image/***.png"/>
2.命名空间报错
这部分代码报错的话,看下图,把框起来的部分代码,改成自己项目的名字
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!