diff --git a/Source/GlobalAssemblyInfo.cs b/Source/GlobalAssemblyInfo.cs
index ce0c39e606..4e5fde9f3b 100644
--- a/Source/GlobalAssemblyInfo.cs
+++ b/Source/GlobalAssemblyInfo.cs
@@ -6,5 +6,5 @@
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
-[assembly: AssemblyVersion("2026.5.24.0")]
-[assembly: AssemblyFileVersion("2026.5.24.0")]
+[assembly: AssemblyVersion("2026.5.30.0")]
+[assembly: AssemblyFileVersion("2026.5.30.0")]
diff --git a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs
index 0ff7f753ea..08463b220d 100644
--- a/Source/NETworkManager.Localization/Resources/Strings.Designer.cs
+++ b/Source/NETworkManager.Localization/Resources/Strings.Designer.cs
@@ -1552,7 +1552,16 @@ public static string CapsLockIsEnabled {
return ResourceManager.GetString("CapsLockIsEnabled", resourceCulture);
}
}
-
+
+ ///
+ /// Looks up a localized string similar to Chart time (seconds).
+ ///
+ public static string ChartTimeInSeconds {
+ get {
+ return ResourceManager.GetString("ChartTimeInSeconds", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Capture.
///
@@ -6237,7 +6246,16 @@ public static string Lime {
return ResourceManager.GetString("Lime", resourceCulture);
}
}
-
+
+ ///
+ /// Looks up a localized string similar to Live.
+ ///
+ public static string Live {
+ get {
+ return ResourceManager.GetString("Live", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Listeners.
///
diff --git a/Source/NETworkManager.Localization/Resources/Strings.resx b/Source/NETworkManager.Localization/Resources/Strings.resx
index 4cb9414464..886495042e 100644
--- a/Source/NETworkManager.Localization/Resources/Strings.resx
+++ b/Source/NETworkManager.Localization/Resources/Strings.resx
@@ -735,6 +735,9 @@
Caps lock is enabled!
+
+ Chart time (seconds)
+
Check for updates at startup
@@ -1513,6 +1516,9 @@ Profile files are not affected!
Lime
+
+ Live
+
Magenta
diff --git a/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs b/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs
index ef48d365e8..30df1a5117 100644
--- a/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs
+++ b/Source/NETworkManager.Settings/GlobalStaticConfiguration.cs
@@ -143,6 +143,7 @@ public static class GlobalStaticConfiguration
public static int PingMonitor_TTL => 64;
public static int PingMonitor_WaitTime => 1000;
public static bool PingMonitor_ExpandHostView => false;
+ public static int PingMonitor_ChartTime => 120;
public static ExportFileType PingMonitor_ExportFileType => ExportFileType.Csv;
// Application: Traceroute
diff --git a/Source/NETworkManager.Settings/SettingsInfo.cs b/Source/NETworkManager.Settings/SettingsInfo.cs
index 1040e8dd83..09a73eccb0 100644
--- a/Source/NETworkManager.Settings/SettingsInfo.cs
+++ b/Source/NETworkManager.Settings/SettingsInfo.cs
@@ -1508,6 +1508,19 @@ public bool PingMonitor_ExpandHostView
}
} = GlobalStaticConfiguration.PingMonitor_ExpandHostView;
+ public int PingMonitor_ChartTime
+ {
+ get;
+ set
+ {
+ if (value == field)
+ return;
+
+ field = value;
+ OnPropertyChanged();
+ }
+ } = GlobalStaticConfiguration.PingMonitor_ChartTime;
+
public string PingMonitor_ExportFilePath
{
get;
diff --git a/Source/NETworkManager/Resources/ContextMenu/ContextMenu.xaml b/Source/NETworkManager/Resources/ContextMenu/ContextMenu.xaml
index 97a0728e5a..096157919f 100644
--- a/Source/NETworkManager/Resources/ContextMenu/ContextMenu.xaml
+++ b/Source/NETworkManager/Resources/ContextMenu/ContextMenu.xaml
@@ -88,7 +88,7 @@
-
+
diff --git a/Source/NETworkManager/Resources/Styles/ExpanderStyles.xaml b/Source/NETworkManager/Resources/Styles/ExpanderStyles.xaml
index 491389b5a4..5d9a6e02ae 100644
--- a/Source/NETworkManager/Resources/Styles/ExpanderStyles.xaml
+++ b/Source/NETworkManager/Resources/Styles/ExpanderStyles.xaml
@@ -75,6 +75,74 @@
Value="{DynamicResource ResourceKey=ExpanderDownHeader}" />
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/Source/NETworkManager/Views/PingMonitorView.xaml b/Source/NETworkManager/Views/PingMonitorView.xaml
index c2e6e2686d..6639822c1a 100644
--- a/Source/NETworkManager/Views/PingMonitorView.xaml
+++ b/Source/NETworkManager/Views/PingMonitorView.xaml
@@ -14,10 +14,26 @@
-
+ BorderBrush="{DynamicResource MahApps.Brushes.Gray8}"
+ Margin="0,0,0,10">
+
+
+
+
+
@@ -228,11 +244,53 @@
YAxes="{Binding PingYAxes}"
DrawMarginFrame="{x:Null}"
EasingFunction="{x:Null}"
+ ZoomMode="PanX, ZoomX, NoFit"
+ ContextMenuOpening="Chart_ContextMenuOpening"
RenderOptions.BitmapScalingMode="NearestNeighbor">
+
diff --git a/Source/NETworkManager/Views/PingMonitorView.xaml.cs b/Source/NETworkManager/Views/PingMonitorView.xaml.cs
index 97e6720162..004d4e1749 100644
--- a/Source/NETworkManager/Views/PingMonitorView.xaml.cs
+++ b/Source/NETworkManager/Views/PingMonitorView.xaml.cs
@@ -1,5 +1,6 @@
using System;
using System.Net;
+using System.Windows.Controls;
using NETworkManager.ViewModels;
namespace NETworkManager.Views;
@@ -34,13 +35,29 @@ public void Stop()
_viewModel.Stop();
}
- public void Export()
+ ///
+ /// Releases resources held by the view model. Must be called when the host is removed.
+ ///
+ public void Cleanup()
{
- _ = _viewModel.Export();
+ // Release the app-lifetime subscription so this transient per-host view (and its
+ // view model) is not kept alive until the application shuts down.
+ Dispatcher.ShutdownStarted -= Dispatcher_ShutdownStarted;
+
+ _viewModel.Cleanup();
}
private void Dispatcher_ShutdownStarted(object sender, EventArgs e)
{
Stop();
}
+
+ ///
+ /// Suppresses the host context menu while the pointer is over the chart, so a
+ /// right-click drag can be used to zoom into a section instead of opening the menu.
+ ///
+ private void Chart_ContextMenuOpening(object sender, ContextMenuEventArgs e)
+ {
+ e.Handled = true;
+ }
}
\ No newline at end of file
diff --git a/Source/NETworkManager/Views/PortScannerView.xaml b/Source/NETworkManager/Views/PortScannerView.xaml
index 45fed20bdd..54bb2151fa 100644
--- a/Source/NETworkManager/Views/PortScannerView.xaml
+++ b/Source/NETworkManager/Views/PortScannerView.xaml
@@ -274,7 +274,7 @@
-
+
@@ -285,7 +285,7 @@
-
+
diff --git a/Source/NETworkManager/Views/SNMPView.xaml b/Source/NETworkManager/Views/SNMPView.xaml
index 283800b3c5..cd62d56e7a 100644
--- a/Source/NETworkManager/Views/SNMPView.xaml
+++ b/Source/NETworkManager/Views/SNMPView.xaml
@@ -641,7 +641,7 @@
-
+
@@ -652,7 +652,7 @@
-
+
diff --git a/Source/NETworkManager/Views/SNTPLookupView.xaml b/Source/NETworkManager/Views/SNTPLookupView.xaml
index b1808aa5b8..47688067a6 100644
--- a/Source/NETworkManager/Views/SNTPLookupView.xaml
+++ b/Source/NETworkManager/Views/SNTPLookupView.xaml
@@ -160,7 +160,7 @@
-
+
@@ -173,7 +173,7 @@
-
+
diff --git a/Source/NETworkManager/Views/SpeedTestWidgetView.xaml b/Source/NETworkManager/Views/SpeedTestWidgetView.xaml
index 0760fc8ebc..c26830cb4b 100644
--- a/Source/NETworkManager/Views/SpeedTestWidgetView.xaml
+++ b/Source/NETworkManager/Views/SpeedTestWidgetView.xaml
@@ -84,15 +84,15 @@
-
+