private void searchResults_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            TreeDataGridItem item = results[searchResults.SelectedIndex];
            TreeDataGridItem tmp  = item;

            while ((item = item.Parent as TreeDataGridItem) != null)
            {
                item.IsExpanded = true;
            }
            int i = list.Items.IndexOf(tmp);

            list.SelectedIndex = i;
            list.ScrollIntoView(tmp);
        }
        private void list_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            TreeDataGridItem item = list.SelectedItem as TreeDataGridItem;

            if (item.Parent != null && (item.Parent as TreeDataGridItem).Type == "命令")
            {
                cmdDialog.SetCurrentItem(item, this);
                (Application.Current.MainWindow as MetroWindow).ShowMetroDialogAsync(cmdDialog);
            }
            else if (item.Parent != null && (item.Parent as TreeDataGridItem).Type == "告示牌")
            {
                signDialog.SetCurrentItem(item, this);
                (Application.Current.MainWindow as MetroWindow).ShowMetroDialogAsync(signDialog);
            }
            else if (!item.HasChildren)
            {
                DataGridRow            row       = (DataGridRow)list.ItemContainerGenerator.ContainerFromIndex(list.SelectedIndex);
                DataGridCellsPresenter presenter = GetVisualChild <DataGridCellsPresenter>(row);
                DataGridCell           cell      = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(2);
                cell.Focus();
                list.BeginEdit();
            }
        }
 private void GetSearchResult(TreeDataGridItem item, string keyword)
 {
     if (item.HasChildren)
     {
         foreach (TreeDataGridItem i in item.Children)
         {
             GetSearchResult(i, keyword);
         }
     }
     else
     {
         if ((item.Original != null && item.Original.Contains(keyword) || item.Translated != null && item.Translated.Contains(keyword)) && item.Parent != null)
         {
             string           str    = item.Type;
             TreeDataGridItem parent = item;
             while ((parent = parent.Parent as TreeDataGridItem).Parent != null)
             {
                 str = parent.Type + ">" + str;
             }
             searchResults.Items.Add(str + item.Original + "\n" + item.Translated);
             results.Add(item);
         }
     }
 }
        public MapTranslator()
        {
            System.Windows.Forms.FolderBrowserDialog m_Dialog = new System.Windows.Forms.FolderBrowserDialog();
            System.Windows.Forms.DialogResult        result   = m_Dialog.ShowDialog();
            InitializeComponent();
            if (result == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }
            string directory = m_Dialog.SelectedPath.Trim();

            filePath = directory;

            string[] split = filePath.Split('\\');
            filePath = filePath + "\\.translation\\" + split[split.Length - 1] + ".mtbl";

            doc.Load(filePath);
            root = doc.SelectSingleNode("LanguageItems");
            if (root.Attributes["CommandBlocks"].Value == "True")
            {
                int.TryParse(root.ChildNodes[1].Attributes["StartIndex"].Value, out int index);
                TreeDataGridItem ldi = new TreeDataGridItem {
                    Type = "命令"
                };
                foreach (XmlNode item in root.ChildNodes[1].ChildNodes)
                {
                    ldi.Children.Add(new TreeDataGridItemCommandBlock(item, index++));
                }
                list.Children.Add(ldi);
            }
            if (root.Attributes["Signs"].Value == "True")
            {
                int.TryParse(root.ChildNodes[2].Attributes["StartIndex"].Value, out int index);
                TreeDataGridItem ldi = new TreeDataGridItem {
                    Type = "告示牌"
                };
                foreach (XmlNode item in root.ChildNodes[2].ChildNodes)
                {
                    ldi.Children.Add(new TreeDataGridItemSign(item, index++));
                }
                list.Children.Add(ldi);
            }
            if (root.Attributes["Containers"].Value == "True")
            {
                int.TryParse(root.ChildNodes[3].Attributes["StartIndex"].Value, out int index);
                TreeDataGridItem ldi = new TreeDataGridItem {
                    Type = "容器"
                };
                foreach (XmlNode item in root.ChildNodes[3].ChildNodes)
                {
                    ldi.Children.Add(new TreeDataGridItemContainer(item, index++));
                }
                list.Children.Add(ldi);
            }
            if (root.Attributes["Entities"].Value == "True")
            {
                int.TryParse(root.ChildNodes[4].Attributes["StartIndex"].Value, out int index);
                TreeDataGridItem ldi = new TreeDataGridItem {
                    Type = "实体"
                };
                foreach (XmlNode item in root.ChildNodes[4].ChildNodes)
                {
                    ldi.Children.Add(new TreeDataGridItemEntity(item, index++));
                }
                list.Children.Add(ldi);
            }
            if (root.Attributes["Spawners"].Value == "True")
            {
                int.TryParse(root.ChildNodes[5].Attributes["StartIndex"].Value, out int index);
                TreeDataGridItem ldi = new TreeDataGridItem {
                    Type = "刷怪笼"
                };
                foreach (XmlNode item in root.ChildNodes[5].ChildNodes)
                {
                    ldi.Children.Add(new TreeDataGridItemMobSpawner(item, index++));
                }
                list.Children.Add(ldi);
            }

            timer.Tick += delegate
            {
                doc.Save(filePath);
                Dispatcher.Invoke(() =>
                {
                    Save(true);
                });
            };
            timer.Start();
        }