using ESRI.ArcGIS.Carto; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Kingo.Plugin.MapView.Views { /// /// UCFieldCalculator.xaml 的交互逻辑 /// public partial class UCFieldCalculator : BaseWindow { public Expression expressionFieldCalculator { get; set; } private IFeatureLayer m_featureLayer; public UCFieldCalculator(IFeatureLayer featureLayer) { InitializeComponent(); m_featureLayer = featureLayer; expressionFieldCalculator = new Expression(); InItFieldList(); } private void InItFieldList() { try { if (m_featureLayer == null || m_featureLayer.FeatureClass == null) return; List fields = new List(); for (int i = 0; i < m_featureLayer.FeatureClass.Fields.FieldCount; i++) { fields.Add(m_featureLayer.FeatureClass.Fields.Field[i].Name); } fieldListBox.ItemsSource = fields; if (fields.Count > 0) fieldListBox.SelectedIndex = 0; } catch (Exception ex) { MessageHelper.ShowTips("获取数据类的字段列表异常!" + ex.Message); LogAPI.Debug("获取数据类的字段列表异常!" + ex.Message); LogAPI.Debug("获取数据类的字段列表异常!" + ex.StackTrace); } } private void FieldListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.Field = fieldListBox.SelectedItem.ToString(); fieldLabel.Content = " " + fieldListBox.SelectedItem.ToString() + " = "; } private void BtnOK_Click(object sender, RoutedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.ExpressionText = contentBlock.Text.Trim(); if (string.IsNullOrEmpty(expressionFieldCalculator.ExpressionText)) { MessageHelper.ShowTips("请先编辑字段计算器!"); this.DialogResult = false; } else { this.DialogResult = true; this.Close(); } } private void BtnCancel_Click(object sender, RoutedEventArgs e) { expressionFieldCalculator = null; this.Close(); } private void VB_Checked(object sender, RoutedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.Type = CODEType.VB; } private void Python_Checked(object sender, RoutedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.Type = CODEType.Python; } private void FigureRadioButton_Checked(object sender, RoutedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.DataType = DataType.FigureType; } private void StringRadioButton_Checked(object sender, RoutedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.DataType = DataType.StringType; } private void DateRadioButton_Checked(object sender, RoutedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.DataType = DataType.DateType; } private void ContentBlock_TextChanged(object sender, TextChangedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); expressionFieldCalculator.ExpressionText = contentBlock.Text; } private void FunctionListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (expressionFieldCalculator == null) expressionFieldCalculator = new Expression(); System.Windows.Controls.ListBoxItem listBoxItem = functionListBox.SelectedItem as ListBoxItem; expressionFieldCalculator.Function = listBoxItem.Content.ToString(); contentBlock.Text += " " + listBoxItem.Content.ToString() + " "; } private void BtnMultiplication_Click(object sender, RoutedEventArgs e) { contentBlock.Text += " * "; } private void BtnDivide_Click(object sender, RoutedEventArgs e) { contentBlock.Text += " / "; } private void BtnWith_Click(object sender, RoutedEventArgs e) { contentBlock.Text += " & "; } private void BtnAdd_Click(object sender, RoutedEventArgs e) { contentBlock.Text += " + "; } private void BtnSubtract_Click(object sender, RoutedEventArgs e) { contentBlock.Text += " - "; } private void BtnEqual_Click(object sender, RoutedEventArgs e) { contentBlock.Text += " = "; } } public class Expression { /// /// 所选字段 /// public string Field { get; set; } /// /// 解析程序类型 /// public CODEType Type { get; set; } = CODEType.Python; /// /// 数据类型 /// public DataType DataType { get; set; } = DataType.StringType; /// /// 函数 /// public object Function { get; set; } /// /// 内容 /// public string ExpressionText { get; set; } } public enum CODEType { Python, VB } public enum DataType { StringType, FigureType, DateType } }