using KGIS.Framework.Platform; using KGIS.Framework.Utils; using KGIS.Framework.Utils.Helper; using Kingo.Plugin.MapView.Model; using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace Kingo.Plugin.MapView.Views { /// /// FrmSelectQS.xaml 的交互逻辑 /// public partial class FrmSelectQS : UserControl { public event EditDicHandler EditDic; public Action SelectedItemChanged; private int SelectedLength = 0; public FrmSelectQS(int pSelectedLength) { InitializeComponent(); this.SelectedLength = pSelectedLength; Init(); } private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { var treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject) as TreeViewItem; if (treeViewItem != null) { treeViewItem.Focus(); e.Handled = true; } } DependencyObject VisualUpwardSearch(DependencyObject source) { while (source != null && source.GetType() != typeof(T)) source = VisualTreeHelper.GetParent(source); return source; } public void Init() { try { //List dicList = DicAPI.GetDic(Enum.DicTypeEnum.QSDM, true); //if (dicList == null) // return; //List treeList = GetTree(dicList); //this.tvXZQ.ItemsSource = treeList; } catch (Exception ex) { LogAPI.Debug("加载数据字典失败 时异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("加载数据字典失败 时异常信息结束"); MessageHelper.ShowTips("加载数据字典失败!"); //LogAPI.Debug("【按行政区划归】加载数据字典异常:" + ex); } } private List GetTree(List dicList) { try { if (dicList == null) return null; List result = new List(); foreach (DataDicTionary dic in dicList) { var n1 = new TreeNode(); n1.Name = dic.NAME; n1.Data = dic; n1.Icon = "pack://application:,,,/KGIS.PlatformPlugin;component/Resources/zrz.png"; if (dic.CODE.Length > 6) n1.IsExpanded = false; else n1.IsExpanded = true; //n1.cMenu = "RouterMenu"; result.Add(n1); if (dic.SubDic != null && dic.SubDic.Count > 0) { n1.Nodes = GetTree(dic.SubDic); } } return result; } catch (Exception ex) { LogAPI.Debug("选择所要划归的行政区期间 获取信息树 时异常,异常信息如下:"); LogAPI.Debug(ex); LogAPI.Debug("选择所要划归的行政区期间 获取信息树 时异常信息结束"); throw ex; } } public object GetSelectedItem() { return tvXZQ.SelectedItem; } private void tvXZQ_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { if (tvXZQ.SelectedItem != null && tvXZQ.SelectedItem is TreeNode) { TreeNode node = tvXZQ.SelectedItem as TreeNode; if (node != null && node.Data is DataDicTionary) { labXZQCode.Content = (node.Data as DataDicTionary).DisplayName; } } } private void btnEditDic_Click(object sender, RoutedEventArgs e) { if (EditDic != null) { EditDic(this); Init(); } } private void btnOK_Click(object sender, RoutedEventArgs e) { if (tvXZQ.SelectedItem != null && tvXZQ.SelectedItem is TreeNode) { TreeNode node = tvXZQ.SelectedItem as TreeNode; if (node != null && node.Data is DataDicTionary) { if ((node.Data as DataDicTionary).CODE.Length == SelectedLength) { if (SelectedItemChanged != null) { SelectedItemChanged(node.Data as DataDicTionary); } //this.Close(); } else { //if (SelectedLength == 19) //{ // MessageBox.Show("请选择正确的权属单位!"); //} //else if (SelectedLength == 12) //{ // MessageBox.Show("请选择村级行政区选项!"); //} } } } } private void btnCancel_Click(object sender, RoutedEventArgs e) { //this.Close(); } } public class TreeNode { #region Property private string _Text; /// /// 显示的文本值 /// public string Name { get { return this._Text; } set { this._Text = value; } } private ContextMenu _cMenu; public ContextMenu cMenu { get { return this._cMenu; } set { this._cMenu = value; } } private bool? _Checked; /// /// 是否选中 /// public bool? Checked { get { return this._Checked; } set { this._Checked = value; } } private bool _IsExpanded; /// /// 是否展开 /// public bool IsExpanded { get { return this._IsExpanded; } set { this._IsExpanded = value; } } /// /// 节点图标:相对路径 /// public string Icon { get; set; } /// /// 子节点,默认null /// public IList Nodes { get; set; } /// /// 该节点数据项,默认null /// public virtual object Data { get; set; } public virtual bool IsOpenEdit { get; set; } public object Paixu { get; internal set; } public bool IsParent { get; internal set; } #endregion #region NodeX-构造函数(初始化) /// /// NodeX-构造函数(初始化) /// public TreeNode() { this.Name = string.Empty; this.Icon = string.Empty; this.Checked = false; } #endregion } }