Prechádzať zdrojové kódy

Changes to DynamicEditorForm positioning

Kenric Nugteren 7 mesiacov pred
rodič
commit
0a0c5414b4

+ 3 - 4
inabox.wpf/DynamicGrid/DynamicEditorForm/DynamicEditorForm.xaml

@@ -21,9 +21,7 @@
                              BorderThickness="0,0.75,0,0"
                              Background="White"
                              CornerRadius="0"
-                             d:DesignHeight="400" d:DesignWidth="400"
-                              Loaded="ThemableChromelessWindow_Loaded"
-                             >
+                             d:DesignHeight="400" d:DesignWidth="400">
     <syncfusion:ChromelessWindow.DataContext>
         <local:DynamicEditorFormModel />
     </syncfusion:ChromelessWindow.DataContext>
@@ -35,5 +33,6 @@
         </local:MyObservableCollection>-->
     </syncfusion:ChromelessWindow.Resources>
 
-    <local:EmbeddedDynamicEditorForm x:Name="Form" x:FieldModifier="public" OnChanged="Form_OnOnChanged" Margin="5"/>
+    <local:EmbeddedDynamicEditorForm x:Name="Form" x:FieldModifier="public" OnChanged="Form_OnOnChanged" Margin="5"
+                                     OnReload="Form_OnReload"/>
 </wpf:ThemableChromelessWindow>

+ 16 - 17
inabox.wpf/DynamicGrid/DynamicEditorForm/DynamicEditorForm.xaml.cs

@@ -53,7 +53,14 @@ public partial class DynamicEditorForm : ThemableChromelessWindow, IDynamicEdito
     #region IDynamicEditorForm
 
     public bool ReadOnly { get => Form.ReadOnly; set => Form.ReadOnly = value; }
-    public BaseObject[] Items { get => Form.Items; set => Form.Items = value; }
+    public BaseObject[] Items
+    {
+        get => Form.Items;
+        set
+        {
+            Form.Items = value;
+        }
+    }
     public DynamicEditorPages? Pages { get => Form.Pages; }
 
     public event OnBeforeLoad? OnBeforeLoad;
@@ -86,6 +93,8 @@ public partial class DynamicEditorForm : ThemableChromelessWindow, IDynamicEdito
 
     public DynamicGridSaveEvent? OnSaveItem { get => Form.OnSaveItem; set { Form.OnSaveItem = value; } }
 
+    public event IDynamicEditorForm.OnReloadEventHandler? OnReload { add => Form.OnReload += value; remove => Form.OnReload -= value; }
+
 
     public IDynamicEditorControl FindEditor(string columnName) => Form.FindEditor(columnName);
     public object? GetEditorValue(string columnName) => Form.GetEditorValue(columnName);
@@ -106,18 +115,6 @@ public partial class DynamicEditorForm : ThemableChromelessWindow, IDynamicEdito
         Form.OnFormCustomiseEditor += (sender, items, column, editor) => OnFormCustomiseEditor?.Invoke(sender, items, column, editor);
     }
 
-    private bool _first = true;
-
-    protected override void OnActivated(EventArgs e)
-    {
-        if (_first)
-        {
-            _first = false;
-            this.MoveToCenter();
-        }
-        base.OnActivated(e);
-    }
-
     public DynamicEditorForm(Type type, DynamicEditorPages? pages = null, DynamicEditorButtons? buttons = null,
         Func<Type, CoreTable>? pageDataHandler = null, bool preloadPages = false): this()
     {
@@ -201,7 +198,12 @@ public partial class DynamicEditorForm : ThemableChromelessWindow, IDynamicEdito
         bChanged = true;
     }
 
-    private void ThemableChromelessWindow_Loaded(object sender, RoutedEventArgs e)
+    private void Form_OnReload(IDynamicEditorForm form)
+    {
+        SetSize();
+    }
+
+    private void SetSize()
     {
         var screen = WpfScreen.GetScreenFrom(new Point(Left, Top));
 
@@ -217,9 +219,6 @@ public partial class DynamicEditorForm : ThemableChromelessWindow, IDynamicEdito
         var maxwidth = screen.WorkingArea.Width - 0;
         Width = desiredwidth > maxwidth ? maxwidth : desiredwidth;
 
-        Left = screen.DeviceBounds.Left + (screen.DeviceBounds.Width - Width) / 2.0F;
-        Top = screen.DeviceBounds.Top + (screen.DeviceBounds.Height - Height) / 2.0F;
-
         var scaption = Form.Items[0].GetType().GetCaption();
         Title = "Edit " + scaption.SplitCamelCase();
     }

+ 2 - 1
inabox.wpf/DynamicGrid/DynamicEditorForm/EmbeddedDynamicEditorForm.xaml

@@ -40,7 +40,8 @@
             GetItems="Editor_GetItems"
             OnGetEditor="Editor_OnGetEditor"
             OnGetPropertyValue="Editor_OnGetPropertyValue"
-            OnSetPropertyValue="Editor_OnSetPropertyValue"/>
+            OnSetPropertyValue="Editor_OnSetPropertyValue"
+            OnReload="Editor_OnReload"/>
 
         <StackPanel 
             Grid.Row="1" 

+ 7 - 0
inabox.wpf/DynamicGrid/DynamicEditorForm/EmbeddedDynamicEditorForm.xaml.cs

@@ -24,6 +24,8 @@ namespace InABox.DynamicGrid
         public event OnAfterLoad? OnAfterLoad;
         public void AfterLoad() => OnAfterLoad?.Invoke(this);
 
+        public event IDynamicEditorForm.OnReloadEventHandler? OnReload;
+
         public event EventHandler OnChanged;
 
         private bool bChanged = false;
@@ -527,5 +529,10 @@ namespace InABox.DynamicGrid
         {
             return EditorValueChanged(this, name, value);
         }
+
+        private void Editor_OnReload(DynamicEditorGrid sender)
+        {
+            OnReload?.Invoke(this);
+        }
     }
 }

+ 3 - 0
inabox.wpf/DynamicGrid/DynamicEditorForm/IDynamicEditorForm.cs

@@ -31,6 +31,9 @@ namespace InABox.DynamicGrid
 
         DynamicEditorPages? Pages { get; }
 
+        delegate void OnReloadEventHandler(IDynamicEditorForm form);
+        event OnReloadEventHandler? OnReload;
+
         bool ReadOnly { get; set; }
 
         BaseObject[] Items { get; set; }

+ 5 - 0
inabox.wpf/DynamicGrid/DynamicEditorGrid.xaml.cs

@@ -169,6 +169,9 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
 
     public event GetItemsEvent? GetItems;
 
+    public delegate void EditorGridOnReloadHandler(DynamicEditorGrid sender);
+    public event EditorGridOnReloadHandler? OnReload;
+
     private void DynamicEditorGrid_Loaded(object sender, RoutedEventArgs e)
     {
         //Reload();
@@ -178,6 +181,8 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
     {
         LoadPages();
         ReconfigureEditors();
+
+        OnReload?.Invoke(this);
     }
 
     #region Host Implementation

+ 4 - 1
inabox.wpf/DynamicGrid/DynamicGrid.cs

@@ -1728,7 +1728,10 @@ public abstract class DynamicGrid<T> : DynamicGrid, IDynamicGridUIComponentParen
         using (var cursor = new WaitCursor())
         {
 
-            editor = new DynamicEditorForm();
+            editor = new DynamicEditorForm()
+            {
+                WindowStartupLocation = WindowStartupLocation.CenterScreen
+            };
             
             editor.SetValue(Panel.ZIndexProperty, 999);