绘制点线面以及符号界面设计(全部代码)

一、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.命名空间报错
这部分代码报错的话,看下图,把框起来的部分代码,改成自己项目的名字

posted @ 2021-10-23 22:01  槑孒  阅读(692)  评论(0编辑  收藏  举报