private void MenuItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     if (e.Source is MenuItem)
     {
         FrameworkElement node = (FrameworkElement)e.Source;
         string           path = "";
         // collect selected object reflection path
         while (node != null && !(node is Popup))
         {
             path = node.Tag.ToString() + "," + path;
             node = (FrameworkElement)node.Parent;
         }
         OverrideRule newRule = OverrideRule.Create(CurrentLib, path.TrimEnd(','));
         if (newRule != null)
         {
             AllOverrides.Add(newRule);
             lbxOverrideRules.SelectedItem = newRule;
             AllOverrides.ToList().Pack(ioPathRuleOverrides);
         }
     }
     if (sender is ContextMenu)
     {
         (sender as ContextMenu).IsOpen = false;
     }
 }
 private void btnOverridesSaveRule_Click(object sender, RoutedEventArgs e)
 {
     if (lbxOverrideRules.SelectedItem != null)
     {
         OverrideRule rule = (OverrideRule)lbxOverrideRules.SelectedItem;
         rule.jsonValue = tbxOverridesEditor.Text;
         rule.notes     = tbxOverrideEditorNotes.Text;
         AllOverrides.ToList().Pack(ioPathRuleOverrides);
     }
 }
        private void btnOverrideRuleDelete_Click(object sender, RoutedEventArgs e)
        {
            int ci = lbxOverrideRules.SelectedIndex;

            if (ci != -1)
            {
                AllOverrides.RemoveAt(ci);
                if (ci < AllOverrides.Count)
                {
                    lbxOverrideRules.SelectedIndex = ci;
                }
                AllOverrides.ToList().Pack(ioPathRuleOverrides);
            }
        }