diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb
index 15f71fa..f7b162a 100644
--- a/Constants/ConstIni.vb
+++ b/Constants/ConstIni.vb
@@ -223,4 +223,9 @@ Module ConstIni
Public Const S_MRUGUNSTOCKPEZ As String = "MruGunStockPez"
Public Const K_FILE As String = "File"
+ Public Const S_EXECUTEWINDOW As String = "ExecuteWindow"
+ Public Const K_LEFT As String = "Left"
+ Public Const K_TOP As String = "Top"
+ Public Const K_WIDTH As String = "Width"
+ Public Const K_HEIGHT As String = "Height"
End Module
diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj
index 7fb7837..8e28c56 100644
--- a/EgtCAM5.vbproj
+++ b/EgtCAM5.vbproj
@@ -402,6 +402,7 @@
+
ViewPanelV.xaml
diff --git a/ExecuteWindow/ExecuteWindowV.xaml b/ExecuteWindow/ExecuteWindowV.xaml
index ce1435d..a7a93ae 100644
--- a/ExecuteWindow/ExecuteWindowV.xaml
+++ b/ExecuteWindow/ExecuteWindowV.xaml
@@ -11,6 +11,7 @@
ShowInTaskbar="False"
TitleBarHeight="32"
PreviewKeyDown="EgtCustomWindow_PreviewKeyDown"
+ EgtCAM5:WindowStateIniBehavior.PersistenceKey="Dimension"
CloseCommand="{Binding Close_Command,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">
diff --git a/Utility/WindowStateBehavior.vb b/Utility/WindowStateBehavior.vb
new file mode 100644
index 0000000..c369878
--- /dev/null
+++ b/Utility/WindowStateBehavior.vb
@@ -0,0 +1,74 @@
+Public Class WindowStateIniBehavior
+
+ Private Shared ReadOnly IsReady As New Dictionary(Of Window, Boolean)
+
+ Public Shared Function GetPersistenceKey(obj As DependencyObject) As String
+ Return CStr(obj.GetValue(PersistenceKeyProperty))
+ End Function
+
+ Public Shared Sub SetPersistenceKey(obj As DependencyObject, value As String)
+ obj.SetValue(PersistenceKeyProperty, value)
+ End Sub
+
+ Public Shared ReadOnly PersistenceKeyProperty As DependencyProperty =
+ DependencyProperty.RegisterAttached(
+ "PersistenceKey",
+ GetType(String),
+ GetType(WindowStateIniBehavior),
+ New PropertyMetadata(Nothing, AddressOf OnKeyChanged)
+ )
+
+ Private Shared Sub OnKeyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
+ Dim Window = TryCast(d, Window)
+ If IsNothing(Window) Then Return
+
+ IsReady(Window) = False
+
+ AddHandler Window.Loaded, Sub() LoadState(Window)
+
+ AddHandler Window.ContentRendered,
+ Sub()
+ IsReady(Window) = True
+ End Sub
+
+ AddHandler Window.LocationChanged, Sub() SaveState(Window)
+ AddHandler Window.SizeChanged, Sub() SaveState(Window)
+ End Sub
+
+ Private Shared Sub SaveState(Window As Window)
+ If Not IsReady(Window) Then Return
+
+ EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_LEFT, Window.Left.ToString(), Map.refMainWindowVM.DimensionDir)
+ EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_TOP, Window.Top.ToString(), Map.refMainWindowVM.DimensionDir)
+ EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_WIDTH, Window.Width.ToString(), Map.refMainWindowVM.DimensionDir)
+ EgtUILib.WritePrivateProfileString(S_EXECUTEWINDOW, K_HEIGHT, Window.Height.ToString(), Map.refMainWindowVM.DimensionDir)
+ End Sub
+
+ Private Shared Sub LoadState(Window As Window)
+ Dim sLeft As String = String.Empty
+ Dim dLeft As Double = 0
+ EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_LEFT, String.Empty, sLeft, Map.refMainWindowVM.DimensionDir)
+ If sLeft IsNot String.Empty Then StringToDouble(sLeft, dLeft)
+
+ Dim sTopD As String = String.Empty
+ Dim dTop As Double = 0.0
+ EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_TOP, String.Empty, sTopD, Map.refMainWindowVM.DimensionDir)
+ If sTopD IsNot String.Empty Then StringToDouble(sTopD, dTop)
+
+ Dim sWidth As String = String.Empty
+ Dim dWidth As Double = 0.0
+ EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_WIDTH, String.Empty, sWidth, Map.refMainWindowVM.DimensionDir)
+ If sWidth IsNot String.Empty Then StringToDouble(sWidth, dWidth)
+
+ Dim sHeight As String = String.Empty
+ Dim dHeight As Double = 0.0
+ EgtUILib.GetPrivateProfileString(S_EXECUTEWINDOW, K_HEIGHT, String.Empty, sHeight, Map.refMainWindowVM.DimensionDir)
+ If sWidth IsNot String.Empty Then StringToDouble(sHeight, dHeight)
+
+ If dLeft > 0 Then Window.Left = dLeft
+ If dTop > 0 Then Window.Top = dTop
+ If dWidth > 0 Then Window.Width = dWidth
+ If dHeight > 0 Then Window.Height = dHeight
+ End Sub
+
+End Class