You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							278 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							278 lines
						
					
					
						
							12 KiB
						
					
					
				using KGIS.Framework.Platform; | 
						|
using Kingo.Plugin.MapView.Enum; | 
						|
using Kingo.Plugin.MapView.Model; | 
						|
using Kingo.PluginServiceInterface.Model; | 
						|
using System; | 
						|
using System.Collections; | 
						|
using System.Collections.Generic; | 
						|
using System.Windows; | 
						|
using System.Windows.Controls; | 
						|
 | 
						|
namespace Kingo.Plugin.MapView.Views.FeatureAttribute | 
						|
{ | 
						|
    /// <summary> | 
						|
    /// UCFieldsInfo.xaml 的交互逻辑 | 
						|
    /// </summary> | 
						|
    public partial class UCFieldsInfo : UserControl, IPropertyStruct | 
						|
    { | 
						|
        private LayerFieldCfg Cfg = null; | 
						|
        private List<PropertyGridDataStruct> _Items; | 
						|
        private string key; | 
						|
        private string val; | 
						|
 | 
						|
        public enumPropertyType PropertyType | 
						|
        { | 
						|
            get { return (enumPropertyType)GetValue(PropertyTypeProperty); } | 
						|
            set { SetValue(PropertyTypeProperty, value); } | 
						|
        } | 
						|
        public IEnumerable ItemsSource | 
						|
        { | 
						|
            get { return _Items; } | 
						|
            set | 
						|
            { | 
						|
                try | 
						|
                { | 
						|
                    _Items = (List<PropertyGridDataStruct>)value; | 
						|
                } | 
						|
                catch (Exception ex) | 
						|
                { | 
						|
                    _Items = new List<PropertyGridDataStruct>(); | 
						|
                    throw ex; | 
						|
                } | 
						|
                finally | 
						|
                { | 
						|
                    //RefreshView(); | 
						|
                } | 
						|
            } | 
						|
        } | 
						|
 | 
						|
        public static readonly DependencyProperty KeyProperty = | 
						|
            DependencyProperty.Register("Key", typeof(string), typeof(UCFieldsInfo), new PropertyMetadata(null)); | 
						|
        public static readonly DependencyProperty ValueProperty = | 
						|
            DependencyProperty.Register("Value", typeof(string), typeof(UCFieldsInfo), new UIPropertyMetadata(null, new PropertyChangedCallback(OnReCalcLayout))); | 
						|
        public static readonly DependencyProperty PropertyTypeProperty = | 
						|
            DependencyProperty.Register("PropertyType", typeof(enumPropertyType), typeof(UCFieldsInfo), new UIPropertyMetadata(enumPropertyType.TextBox, new PropertyChangedCallback(OnReBindingLayout))); | 
						|
 | 
						|
        public string Key | 
						|
        { | 
						|
            get { return (string)GetValue(KeyProperty); } | 
						|
            set { SetValue(KeyProperty, value); } | 
						|
        } | 
						|
        public string Value | 
						|
        { | 
						|
            get { return (string)GetValue(ValueProperty); } | 
						|
            set { SetValue(ValueProperty, value); } | 
						|
        } | 
						|
        public List<DataDicTionary> DicData { get; set; } | 
						|
        public string DisplayMemberPath { get; set; } | 
						|
        public string ValuePath { get; set; } | 
						|
        public bool IsReadOnly { get; set; } | 
						|
        public bool Visible { get; set; } | 
						|
 | 
						|
        public UCFieldsInfo() | 
						|
        { | 
						|
            InitializeComponent(); | 
						|
            //_Items = new List<PropertyGridDataStruct>(); | 
						|
            //string cfgFilePath = System.IO.Path.Combine(SysAppPath.GetConfigPath(), "LayerFieldsCfg.xml"); | 
						|
            //Cfg = SerializeAPI.DeserializeToObject2<LayerFieldCfg>(cfgFilePath); | 
						|
        } | 
						|
        private static void OnReCalcLayout(DependencyObject sender, DependencyPropertyChangedEventArgs e) | 
						|
        { | 
						|
            //(sender as UCFieldsInfo).ReCalcLayout(); | 
						|
            (sender as UCFieldsInfo).ChangeView(); | 
						|
        } | 
						|
        private static void OnReBindingLayout(DependencyObject sender, DependencyPropertyChangedEventArgs e) | 
						|
        { | 
						|
            //(sender as UCFieldsInfo).ReCalcLayout(); | 
						|
            (sender as UCFieldsInfo).SetBinding(); | 
						|
        } | 
						|
        private void SetBinding() | 
						|
        { | 
						|
            //Binding bind = new Binding(); | 
						|
            //bind.Path = new PropertyPath("Value"); | 
						|
            //bind.Mode = BindingMode.TwoWay; | 
						|
            //bind.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus; | 
						|
            //bind.RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent); | 
						|
            switch (PropertyType) | 
						|
            { | 
						|
                case enumPropertyType.Default: | 
						|
                    break; | 
						|
                case enumPropertyType.TextBox: | 
						|
                    //TextBox.Visibility = Visibility.Visible; | 
						|
                    //TextBox.SetBinding(TextBox.TextProperty, bind); | 
						|
                    break; | 
						|
                case enumPropertyType.ComboBox: | 
						|
                    break; | 
						|
                case enumPropertyType.CheckBox: | 
						|
                    break; | 
						|
                case enumPropertyType.DatePicker: | 
						|
                    break; | 
						|
                case enumPropertyType.SpinEdit: | 
						|
                    break; | 
						|
                case enumPropertyType.ButtonEdit: | 
						|
                    break; | 
						|
                case enumPropertyType.ButtonEditFJ: | 
						|
                    break; | 
						|
                case enumPropertyType.AutoCompleteBox: | 
						|
                    break; | 
						|
                default: | 
						|
                    break; | 
						|
            } | 
						|
        } | 
						|
        private void ChangeView() | 
						|
        { | 
						|
            lable.Content = Key; | 
						|
            TextBox.Text = Value; | 
						|
        } | 
						|
 | 
						|
        //private void RefreshView() | 
						|
        //{ | 
						|
        //    SetVisible(_Items); | 
						|
        //    #region | 
						|
        //    LayerInfo layer = Cfg.Layers[0]; | 
						|
        //    grid.Children.Clear(); | 
						|
        //    grid.RowDefinitions.Clear(); | 
						|
        //    foreach (var item in _Items) | 
						|
        //    { | 
						|
        //        if (item.Visible) | 
						|
        //        { | 
						|
        //            grid.RowDefinitions.Add(new RowDefinition()); | 
						|
        //            Label lab = new Label(); | 
						|
        //            lab.Content = item.Key; | 
						|
        //            lab.SetValue(Grid.RowProperty, grid.RowDefinitions.Count - 1); | 
						|
        //            lab.HorizontalContentAlignment = HorizontalAlignment.Right; | 
						|
        //            lab.Margin = new Thickness(4); | 
						|
        //            grid.Children.Add(lab); | 
						|
 | 
						|
        //            Control ctrl = new TextBox(); | 
						|
        //            Binding bind = new Binding(); | 
						|
        //            bind.Path = new PropertyPath("Value"); | 
						|
        //            bind.Mode = BindingMode.TwoWay; | 
						|
        //            bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; | 
						|
        //            switch (item.PropertyType) | 
						|
        //            { | 
						|
        //                case enumPropertyType.Default: | 
						|
        //                case enumPropertyType.TextBox: | 
						|
        //                    ctrl = new TextBox(); | 
						|
        //                    //ctrl.DataContext = item; | 
						|
        //                    ctrl.SetBinding(TextBox.TextProperty, bind); | 
						|
        //                    break; | 
						|
        //                case enumPropertyType.CheckBox: | 
						|
        //                    ctrl = new CheckBox(); | 
						|
        //                    //ctrl.DataContext = item; | 
						|
        //                    ctrl.SetBinding(CheckBox.IsCheckedProperty, bind); | 
						|
        //                    break; | 
						|
        //                case enumPropertyType.DatePicker: | 
						|
        //                    ctrl = new DatePicker(); | 
						|
        //                    //ctrl.DataContext = item; | 
						|
        //                    ctrl.SetBinding(DatePicker.TextProperty, bind); | 
						|
        //                    break; | 
						|
        //                case enumPropertyType.SpinEdit: | 
						|
        //                    break; | 
						|
        //                case enumPropertyType.ButtonEdit: | 
						|
        //                    break; | 
						|
        //                case enumPropertyType.ComboBox: | 
						|
        //                case enumPropertyType.AutoCompleteBox: | 
						|
        //                    ctrl = new AutoCompleteBox(); | 
						|
        //                    //ctrl.DataContext = item; | 
						|
        //                    ctrl.SetValue(AutoCompleteBox.ItemsSourceProperty, item.DicData); | 
						|
        //                    ctrl.SetValue(AutoCompleteBox.ValueMemberPathProperty, item.ValuePath); | 
						|
        //                    ctrl.SetValue(AutoCompleteBox.DisplayMemberPathProperty, item.DisplayMemberPath); | 
						|
        //                    ctrl.SetBinding(AutoCompleteBox.SelectedValueProperty, bind); | 
						|
        //                    break; | 
						|
        //                default: | 
						|
        //                    break; | 
						|
        //            } | 
						|
 | 
						|
        //            ctrl.SetValue(Grid.RowProperty, grid.RowDefinitions.Count - 1); | 
						|
        //            ctrl.SetValue(Grid.ColumnProperty, 1); | 
						|
        //            ctrl.HorizontalAlignment = HorizontalAlignment.Stretch; | 
						|
        //            ctrl.Margin = new Thickness(2); | 
						|
        //            grid.Children.Add(ctrl); | 
						|
        //        } | 
						|
        //    } | 
						|
        //    #endregion | 
						|
        //} | 
						|
 | 
						|
        //private void SetVisible(List<PropertyGridDataStruct> pList) | 
						|
        //{ | 
						|
        //    if (Cfg == null) return; | 
						|
        //    if (Cfg.Layers.Count == 0) return; | 
						|
        //    LayerInfo layer = Cfg.Layers[0]; | 
						|
        //    foreach (var item in layer.Fields) | 
						|
        //    { | 
						|
        //        string val = string.Empty; | 
						|
        //        int idx = -1; | 
						|
        //        List<DataDicTionary> TempDic = null; | 
						|
        //        var GroupField = pList.FirstOrDefault(f => f.Key == item.Name || f.Key == item.AliasName); | 
						|
        //        if (GroupField == null) | 
						|
        //        { | 
						|
        //            GroupField = new PropertyGridDataStruct(); | 
						|
        //            GroupField.PropertyType = enumPropertyType.ComboBox; | 
						|
        //        } | 
						|
        //        GroupField.Key = item.AliasName; | 
						|
        //        foreach (var subItem in item.Fields) | 
						|
        //        { | 
						|
        //            var field = pList.FirstOrDefault(f => f.Key == subItem.Name || f.Key == subItem.AliasName); | 
						|
        //            if (field == null) return; | 
						|
        //            if (!string.IsNullOrWhiteSpace(field.Value)) | 
						|
        //            { | 
						|
        //                //if (!string.IsNullOrWhiteSpace(val.ToTrim())) | 
						|
        //                //    val += " - "; | 
						|
        //                //val += field.Value; | 
						|
        //            } | 
						|
        //            if (GroupField.PropertyType == field.PropertyType) | 
						|
        //            { | 
						|
        //                GroupField.Value = field.Value; | 
						|
        //                GroupField.DicData = field.DicData; | 
						|
        //                GroupField.ValuePath = field.ValuePath; | 
						|
        //                GroupField.DisplayMemberPath = field.DisplayMemberPath; | 
						|
        //            } | 
						|
        //            if (!string.IsNullOrWhiteSpace(subItem.DisplayWhere.ToTrim())) | 
						|
        //            { | 
						|
        //                //字段显示条件 | 
						|
        //                string[] wheres = subItem.DisplayWhere.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); | 
						|
        //                for (int i = 0; i < wheres.Length; i++) | 
						|
        //                { | 
						|
        //                    string[] kv = wheres[i].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); | 
						|
        //                    if (kv.Length != 2) | 
						|
        //                    { | 
						|
        //                        LogAPI.Debug(string.Format("图层字段配置错误,FieldCfg中Name={0}", subItem.Name)); | 
						|
        //                        continue; | 
						|
        //                    } | 
						|
        //                    var tempField = pList.FirstOrDefault(f => f.Key == kv[0] || f.Key == kv[0]); | 
						|
        //                    if (tempField != null) | 
						|
        //                    { | 
						|
        //                        if (kv[1].ToTrim().Contains("%")) | 
						|
        //                            subItem.Display = tempField.Value.ToTrim().StartsWith(kv[1].ToTrim().Replace("%", "")); | 
						|
        //                        else | 
						|
        //                            subItem.Display = tempField.Value.ToTrim() == kv[1].ToTrim(); | 
						|
        //                    } | 
						|
        //                } | 
						|
        //            } | 
						|
        //            field.Visible = subItem.Display; | 
						|
        //            if (field.Visible) | 
						|
        //            { | 
						|
        //                item.Display = false; | 
						|
        //            } | 
						|
        //            if (idx == -1) | 
						|
        //            { | 
						|
        //                idx = pList.IndexOf(field); | 
						|
        //            } | 
						|
        //        } | 
						|
        //        if (item.Display) | 
						|
        //        { | 
						|
        //            if (idx == -1) idx = 0; | 
						|
        //            var field = pList.FirstOrDefault(f => f.Key == item.Name || f.Key == item.AliasName); | 
						|
        //            if (field == null) | 
						|
        //            { | 
						|
        //                GroupField.Value = val; | 
						|
        //                GroupField.Visible = item.Display; | 
						|
        //                pList.Insert(idx, GroupField); | 
						|
        //            } | 
						|
        //            GroupField.Visible = item.Display; | 
						|
        //        } | 
						|
        //    } | 
						|
        //} | 
						|
    } | 
						|
}
 | 
						|
 |