diff --git a/.gitignore b/.gitignore
index 940794e..7dbb804 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
+.ionide
+
# User-specific files
*.suo
*.user
diff --git a/samples/BarChartSample/App.config b/samples/BarChartSample/App.config
deleted file mode 100644
index 88fa402..0000000
--- a/samples/BarChartSample/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/BarChartSample/BarChartSample.csproj b/samples/BarChartSample/BarChartSample.csproj
index 5348a1f..1ccce3b 100644
--- a/samples/BarChartSample/BarChartSample.csproj
+++ b/samples/BarChartSample/BarChartSample.csproj
@@ -1,103 +1,15 @@
-
-
-
+
+
+
+
+
+
- Debug
- AnyCPU
- {F36872BF-8818-4019-A207-2B381C33C370}
WinExe
- BarChartSample
- BarChartSample
- v4.5.2
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
+ netcoreapp3.0
+ true
+ false
+
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
-
-
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
- {2d34544c-2df2-4b20-a43a-6c8d2df3dd82}
- InteractiveDataDisplay.WPF
-
-
-
+
\ No newline at end of file
diff --git a/samples/HeatmapSample/App.config b/samples/HeatmapSample/App.config
deleted file mode 100644
index 88fa402..0000000
--- a/samples/HeatmapSample/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/HeatmapSample/HeatmapSample.csproj b/samples/HeatmapSample/HeatmapSample.csproj
index efd14c7..1ccce3b 100644
--- a/samples/HeatmapSample/HeatmapSample.csproj
+++ b/samples/HeatmapSample/HeatmapSample.csproj
@@ -1,120 +1,15 @@
-
-
-
+
+
+
+
+
+
- Debug
- AnyCPU
- {A59C204A-01D9-41A4-BE67-64ECDB991560}
WinExe
- HeatmapSample
- HeatmapSample
- v4.5.2
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
+ netcoreapp3.0
+ true
+ false
+
-
-
-
-
- ..\packages\System.Reactive.Core.3.1.1\lib\net45\System.Reactive.Core.dll
-
-
- ..\packages\System.Reactive.Interfaces.3.1.1\lib\net45\System.Reactive.Interfaces.dll
-
-
- ..\packages\System.Reactive.Linq.3.1.1\lib\net45\System.Reactive.Linq.dll
-
-
- ..\packages\System.Reactive.PlatformServices.3.1.1\lib\net45\System.Reactive.PlatformServices.dll
-
-
- ..\packages\System.Reactive.Windows.Threading.3.1.1\lib\net45\System.Reactive.Windows.Threading.dll
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
-
-
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
- {2d34544c-2df2-4b20-a43a-6c8d2df3dd82}
- InteractiveDataDisplay.WPF
-
-
-
+
\ No newline at end of file
diff --git a/samples/LineGraphSample/App.config b/samples/LineGraphSample/App.config
deleted file mode 100644
index 88fa402..0000000
--- a/samples/LineGraphSample/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/LineGraphSample/LineGraphSample.csproj b/samples/LineGraphSample/LineGraphSample.csproj
index f4d1ea6..1ccce3b 100644
--- a/samples/LineGraphSample/LineGraphSample.csproj
+++ b/samples/LineGraphSample/LineGraphSample.csproj
@@ -1,103 +1,15 @@
-
-
-
+
+
+
+
+
+
- Debug
- AnyCPU
- {284A7617-B70F-4A4A-B73A-1A8088B75926}
WinExe
- LineGraphSample
- LineGraphSample
- v4.5.2
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
+ netcoreapp3.0
+ true
+ false
+
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
-
-
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
- {2d34544c-2df2-4b20-a43a-6c8d2df3dd82}
- InteractiveDataDisplay.WPF
-
-
-
+
\ No newline at end of file
diff --git a/samples/LineGraphSample/MainWindow.xaml.cs b/samples/LineGraphSample/MainWindow.xaml.cs
index 9e05c7b..da29593 100644
--- a/samples/LineGraphSample/MainWindow.xaml.cs
+++ b/samples/LineGraphSample/MainWindow.xaml.cs
@@ -23,6 +23,9 @@ public MainWindow()
for (int i = 0; i < x.Length; i++)
x[i] = 3.1415 * i / (x.Length - 1);
+ plotter.LeftBound = x[x.Length / 10];
+ plotter.RightBound = x[x.Length - x.Length / 10];
+
for (int i = 0; i < 25; i++)
{
var lg = new LineGraph();
diff --git a/samples/MarkersSample/App.config b/samples/MarkersSample/App.config
deleted file mode 100644
index 88fa402..0000000
--- a/samples/MarkersSample/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/MarkersSample/MarkersSample.csproj b/samples/MarkersSample/MarkersSample.csproj
index 9c5f8bc..1ccce3b 100644
--- a/samples/MarkersSample/MarkersSample.csproj
+++ b/samples/MarkersSample/MarkersSample.csproj
@@ -1,103 +1,15 @@
-
-
-
+
+
+
+
+
+
- Debug
- AnyCPU
- {4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F}
WinExe
- MarkersSample
- MarkersSample
- v4.5.2
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
+ netcoreapp3.0
+ true
+ false
+
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
-
-
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
- {2d34544c-2df2-4b20-a43a-6c8d2df3dd82}
- InteractiveDataDisplay.WPF
-
-
-
+
\ No newline at end of file
diff --git a/samples/SyncGraphsSample/App.config b/samples/SyncGraphsSample/App.config
deleted file mode 100644
index 88fa402..0000000
--- a/samples/SyncGraphsSample/App.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/SyncGraphsSample/SyncGraphsSample.csproj b/samples/SyncGraphsSample/SyncGraphsSample.csproj
index ba53a34..1ccce3b 100644
--- a/samples/SyncGraphsSample/SyncGraphsSample.csproj
+++ b/samples/SyncGraphsSample/SyncGraphsSample.csproj
@@ -1,112 +1,15 @@
-
-
-
+
+
+
+
+
+
- Debug
- AnyCPU
- {0C4C6C54-F253-4FD2-8B38-75E476882A4B}
WinExe
- Properties
- SyncGraphsSample
- SyncGraphsSample
- v4.5.2
- 512
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- 4
- true
-
-
- AnyCPU
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- AnyCPU
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
+ netcoreapp3.0
+ true
+ false
+
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- App.xaml
- Code
-
-
- MainWindow.xaml
- Code
-
-
-
-
- Code
-
-
- True
- True
- Resources.resx
-
-
- True
- Settings.settings
- True
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
-
-
-
-
-
-
- {2d34544c-2df2-4b20-a43a-6c8d2df3dd82}
- InteractiveDataDisplay.WPF
-
-
-
-
+
\ No newline at end of file
diff --git a/sln/InteractiveDataDisplay.WPF.sln b/sln/InteractiveDataDisplay.WPF.sln
index 734952b..e17fa0f 100644
--- a/sln/InteractiveDataDisplay.WPF.sln
+++ b/sln/InteractiveDataDisplay.WPF.sln
@@ -1,68 +1,104 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InteractiveDataDisplay.WPF", "..\src\InteractiveDataDisplay.WPF.csproj", "{2D34544C-2DF2-4B20-A43A-6C8D2DF3DD82}"
+# Visual Studio 15
+VisualStudioVersion = 15.0.26124.0
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InteractiveDataDisplay.WPF", "..\src\InteractiveDataDisplay.WPF.csproj", "{9E11FAD5-9967-4917-BFDB-436CAAC53B4C}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6E637A98-DA68-40CF-B194-56CEB99A57A0}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BarChartSample", "..\samples\BarChartSample\BarChartSample.csproj", "{E489642B-F6D5-449E-8BEF-67E1D376D323}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeatmapSample", "..\samples\HeatmapSample\HeatmapSample.csproj", "{A59C204A-01D9-41A4-BE67-64ECDB991560}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeatmapSample", "..\samples\HeatmapSample\HeatmapSample.csproj", "{EC80E000-26CC-44C6-81EC-4588E17DF5A1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkersSample", "..\samples\MarkersSample\MarkersSample.csproj", "{4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LineGraphSample", "..\samples\LineGraphSample\LineGraphSample.csproj", "{C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LineGraphSample", "..\samples\LineGraphSample\LineGraphSample.csproj", "{284A7617-B70F-4A4A-B73A-1A8088B75926}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkersSample", "..\samples\MarkersSample\MarkersSample.csproj", "{FB0604D7-47DF-4922-BD78-842A1C1AE861}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BarChartSample", "..\samples\BarChartSample\BarChartSample.csproj", "{F36872BF-8818-4019-A207-2B381C33C370}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BingMapsSample", "..\samples\BingMapsSample\BingMapsSample.csproj", "{C724F25D-6F77-48C0-A791-28E34E6B0F0C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyncGraphsSample", "..\samples\SyncGraphsSample\SyncGraphsSample.csproj", "{0C4C6C54-F253-4FD2-8B38-75E476882A4B}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyncGraphsSample", "..\samples\SyncGraphsSample\SyncGraphsSample.csproj", "{6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {2D34544C-2DF2-4B20-A43A-6C8D2DF3DD82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2D34544C-2DF2-4B20-A43A-6C8D2DF3DD82}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {2D34544C-2DF2-4B20-A43A-6C8D2DF3DD82}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {2D34544C-2DF2-4B20-A43A-6C8D2DF3DD82}.Release|Any CPU.Build.0 = Release|Any CPU
- {A59C204A-01D9-41A4-BE67-64ECDB991560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A59C204A-01D9-41A4-BE67-64ECDB991560}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A59C204A-01D9-41A4-BE67-64ECDB991560}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A59C204A-01D9-41A4-BE67-64ECDB991560}.Release|Any CPU.Build.0 = Release|Any CPU
- {4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F}.Release|Any CPU.Build.0 = Release|Any CPU
- {284A7617-B70F-4A4A-B73A-1A8088B75926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {284A7617-B70F-4A4A-B73A-1A8088B75926}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {284A7617-B70F-4A4A-B73A-1A8088B75926}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {284A7617-B70F-4A4A-B73A-1A8088B75926}.Release|Any CPU.Build.0 = Release|Any CPU
- {F36872BF-8818-4019-A207-2B381C33C370}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F36872BF-8818-4019-A207-2B381C33C370}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {F36872BF-8818-4019-A207-2B381C33C370}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {F36872BF-8818-4019-A207-2B381C33C370}.Release|Any CPU.Build.0 = Release|Any CPU
- {C724F25D-6F77-48C0-A791-28E34E6B0F0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {C724F25D-6F77-48C0-A791-28E34E6B0F0C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C724F25D-6F77-48C0-A791-28E34E6B0F0C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {C724F25D-6F77-48C0-A791-28E34E6B0F0C}.Release|Any CPU.Build.0 = Release|Any CPU
- {0C4C6C54-F253-4FD2-8B38-75E476882A4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {0C4C6C54-F253-4FD2-8B38-75E476882A4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {0C4C6C54-F253-4FD2-8B38-75E476882A4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {0C4C6C54-F253-4FD2-8B38-75E476882A4B}.Release|Any CPU.Build.0 = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
- GlobalSection(NestedProjects) = preSolution
- {A59C204A-01D9-41A4-BE67-64ECDB991560} = {6E637A98-DA68-40CF-B194-56CEB99A57A0}
- {4BEA4B4C-5B83-4FD7-B9BF-3AE4F1CC571F} = {6E637A98-DA68-40CF-B194-56CEB99A57A0}
- {284A7617-B70F-4A4A-B73A-1A8088B75926} = {6E637A98-DA68-40CF-B194-56CEB99A57A0}
- {F36872BF-8818-4019-A207-2B381C33C370} = {6E637A98-DA68-40CF-B194-56CEB99A57A0}
- {C724F25D-6F77-48C0-A791-28E34E6B0F0C} = {6E637A98-DA68-40CF-B194-56CEB99A57A0}
- {0C4C6C54-F253-4FD2-8B38-75E476882A4B} = {6E637A98-DA68-40CF-B194-56CEB99A57A0}
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Debug|x64.Build.0 = Debug|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Debug|x86.Build.0 = Debug|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Release|x64.ActiveCfg = Release|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Release|x64.Build.0 = Release|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Release|x86.ActiveCfg = Release|Any CPU
+ {9E11FAD5-9967-4917-BFDB-436CAAC53B4C}.Release|x86.Build.0 = Release|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Debug|x64.Build.0 = Debug|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Debug|x86.Build.0 = Debug|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Release|x64.ActiveCfg = Release|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Release|x64.Build.0 = Release|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Release|x86.ActiveCfg = Release|Any CPU
+ {E489642B-F6D5-449E-8BEF-67E1D376D323}.Release|x86.Build.0 = Release|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Debug|x64.Build.0 = Debug|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Debug|x86.Build.0 = Debug|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Release|x64.ActiveCfg = Release|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Release|x64.Build.0 = Release|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Release|x86.ActiveCfg = Release|Any CPU
+ {EC80E000-26CC-44C6-81EC-4588E17DF5A1}.Release|x86.Build.0 = Release|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Debug|x64.Build.0 = Debug|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Debug|x86.Build.0 = Debug|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Release|x64.ActiveCfg = Release|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Release|x64.Build.0 = Release|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Release|x86.ActiveCfg = Release|Any CPU
+ {C35207DA-9E1C-4D2D-8E4F-7AA193B3B7E8}.Release|x86.Build.0 = Release|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Debug|x64.Build.0 = Debug|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Debug|x86.Build.0 = Debug|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Release|x64.ActiveCfg = Release|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Release|x64.Build.0 = Release|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Release|x86.ActiveCfg = Release|Any CPU
+ {FB0604D7-47DF-4922-BD78-842A1C1AE861}.Release|x86.Build.0 = Release|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Debug|x64.Build.0 = Debug|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Debug|x86.Build.0 = Debug|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Release|x64.ActiveCfg = Release|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Release|x64.Build.0 = Release|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Release|x86.ActiveCfg = Release|Any CPU
+ {6E0CBDE1-8A39-4F6E-9CA7-5B0BE04761B1}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
diff --git a/src/Axes/AxisGrid.cs b/src/Axes/AxisGrid.cs
index 3b83d13..39af9f0 100644
--- a/src/Axes/AxisGrid.cs
+++ b/src/Axes/AxisGrid.cs
@@ -87,14 +87,14 @@ public IEnumerable HorizontalTicks
///
/// Identifies dependency property
///
- public static readonly DependencyProperty IsXAxisReversedProperty =
+ new public static readonly DependencyProperty IsXAxisReversedProperty =
DependencyProperty.Register("IsXAxisReversed", typeof(bool), typeof(AxisGrid), new PropertyMetadata(false));
///
/// Gets or sets a flag indicating whether the x-axis is reversed or not.
///
[Category("InteractiveDataDisplay")]
- public bool IsXAxisReversed
+ new public bool IsXAxisReversed
{
get { return (bool)GetValue(IsXAxisReversedProperty); }
set { SetValue(IsXAxisReversedProperty, value); }
@@ -103,14 +103,14 @@ public bool IsXAxisReversed
///
/// Identifies dependency property
///
- public static readonly DependencyProperty IsYAxisReversedProperty =
+ new public static readonly DependencyProperty IsYAxisReversedProperty =
DependencyProperty.Register("IsYAxisReversed", typeof(bool), typeof(AxisGrid), new PropertyMetadata(false));
///
/// Gets or sets a flag indicating whether the y-axis is reversed or not.
///
[Category("InteractiveDataDisplay")]
- public bool IsYAxisReversed
+ new public bool IsYAxisReversed
{
get { return (bool)GetValue(IsYAxisReversedProperty); }
set { SetValue(IsYAxisReversedProperty, value); }
@@ -152,7 +152,7 @@ protected override Size MeasureOverride(Size availableSize)
if (Double.IsInfinity(availableSize.Height))
availableSize.Height = 1024;
-
+
GeometryGroup group = new GeometryGroup();
double[] hTicks = HorizontalTicks.ToArray();
@@ -224,7 +224,7 @@ private double GetHorizontalCoordinateFromTick(double tick, double screenSize, R
private double GetVerticalCoordinateFromTick(double tick, double screenSize, Range range)
{
- return screenSize - ValueToScreen(YDataTransform.DataToPlot(tick), screenSize, range, IsYAxisReversed);
+ return screenSize - ValueToScreen(YDataTransform.DataToPlot(tick), screenSize, range, IsYAxisReversed);
}
diff --git a/src/Chart.cs b/src/Chart.cs
index 014121c..ca8486a 100644
--- a/src/Chart.cs
+++ b/src/Chart.cs
@@ -67,6 +67,36 @@ protected override void OnLostFocus(RoutedEventArgs e)
base.OnLostFocus(e);
}
+ ///
+ /// Gets or sets Left plot bound.
+ ///
+ [Category("InteractiveDataDisplay")]
+ public double? LeftBound {
+ get { return (double?)GetValue(LeftBoundProperty); }
+ set { SetValue(LeftBoundProperty, value); }
+ }
+
+ ///
+ /// Identifies dependency property
+ ///
+ public static readonly DependencyProperty LeftBoundProperty =
+ DependencyProperty.Register("LeftBound", typeof(double?), typeof(Chart), new PropertyMetadata(null));
+
+ ///
+ /// Identifies dependency property
+ ///
+ public static readonly DependencyProperty RightBoundProperty =
+ DependencyProperty.Register("RightBound", typeof(double?), typeof(Chart), new PropertyMetadata(null));
+
+ ///
+ /// Gets or sets Right plot bound.
+ ///
+ [Category("InteractiveDataDisplay")]
+ public double? RightBound {
+ get { return (double?)GetValue(RightBoundProperty); }
+ set { SetValue(RightBoundProperty, value); }
+ }
+
///
/// Gets or sets legend content
///
diff --git a/src/Figure.cs b/src/Figure.cs
index 2923e2d..de654d6 100644
--- a/src/Figure.cs
+++ b/src/Figure.cs
@@ -127,8 +127,12 @@ protected override Size MeasureOverride(Size availableSize)
if (IsAutoFitEnabled)
{
desiredRect = AggregateBounds();
- if (desiredRect.IsEmpty)
- desiredRect = new DataRect(0, 0, 1, 1);
+ if(desiredRect.IsEmpty)
+ desiredRect = new DataRect(0, 0, 1, 1);
+ else {
+ if(LeftBound != null && RightBound != null)
+ desiredRect.X = new Range(LeftBound.Value, RightBound.Value);
+ }
SetPlotRect(desiredRect, true);
}
else // resize
diff --git a/src/InteractiveDataDisplay.WPF.csproj b/src/InteractiveDataDisplay.WPF.csproj
index f5bd771..8fa74bb 100644
--- a/src/InteractiveDataDisplay.WPF.csproj
+++ b/src/InteractiveDataDisplay.WPF.csproj
@@ -1,74 +1,19 @@
-
-
-
+
+
- Debug
- AnyCPU
- {2D34544C-2DF2-4B20-A43A-6C8D2DF3DD82}
- Library
- Properties
- InteractiveDataDisplay.WPF
- InteractiveDataDisplay.WPF
- net452;net46
- 512
-
-
-
- true
- full
- false
- bin\Debug\
- TRACE;DEBUG;NETFRAMEWORK;NETFRAMEWORK;
- prompt
- 4
- true
-
-
- pdbonly
- true
- bin\Release\
- TRACE;RELEASE;NETFRAMEWORK;;RELEASE;NETFRAMEWORK;RELEASE;NETFRAMEWORK;
- prompt
- 4
+ netcoreapp3.0
+ true
true
+ false
-
- $(MSBuildExtensionsPath)\$(VisualStudioVersion)\Bin\Microsoft.CSharp.targets
- 1.1.0
- Microsoft; MSU ITIS Lab
- Sergey Berezin, Vassily Lyutsarev, Nikita Skoblov, Natalia Stepanova
- Interactive Data Display for WPF is a set of controls for adding interactive visualization of dynamic data to your application.
- Copyright 2017 Microsoft Corporation
- idd wpf visualization plot plots plotting chart charting data interactive datavisualization
- https://github.com/Microsoft/InteractiveDataDisplay.WPF
- https://github.com/Microsoft/InteractiveDataDisplay.WPF/blob/master/LICENSE
+
+
+ NET_CORE
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Designer
- MSBuild:Compile
-
-
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/src/Legend/Legend.cs b/src/Legend/Legend.cs
index 5a6c849..a7d56c4 100644
--- a/src/Legend/Legend.cs
+++ b/src/Legend/Legend.cs
@@ -11,7 +11,7 @@ namespace InteractiveDataDisplay.WPF
///
/// Control for placing legend contents.
///
- [Description("Control for legend contents")]
+ [Description("Control for legend contents")]
public class Legend : ContentControl
{
///
@@ -109,8 +109,8 @@ public static void SetIsVisible(DependencyObject obj, bool isVisible)
///
/// Identifies attached property to get or set visibility of a legend.
///
- public static readonly DependencyProperty IsVisibleProperty =
- DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(Legend), new PropertyMetadata(true));
+ new public static readonly DependencyProperty IsVisibleProperty =
+ DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(Legend), new PropertyMetadata(true));
}
}
diff --git a/src/PlotBase.cs b/src/PlotBase.cs
index e24f41b..2bf6799 100644
--- a/src/PlotBase.cs
+++ b/src/PlotBase.cs
@@ -31,6 +31,24 @@ public abstract class PlotBase : Panel
#region Properties
+ ///
+ /// Desired Left plot bound.
+ ///
+ [Category("InteractiveDataDisplay")]
+ public double? LeftBound {
+ get { return (double?)GetValue(LeftBoundProperty); }
+ set { SetValue(LeftBoundProperty, value); }
+ }
+
+ ///
+ /// Desired Right plot bound.
+ ///
+ [Category("InteractiveDataDisplay")]
+ public double? RightBound {
+ get { return (double?)GetValue(RightBoundProperty); }
+ set { SetValue(RightBoundProperty, value); }
+ }
+
/// Gets or sets padding - distance in screen units from each side of border to edges of plot bounding rectangle.
/// Effective padding for composition of plots is computed as maximum of all paddings.
[Category("InteractiveDataDisplay")]
@@ -273,7 +291,7 @@ private void AddDependant(PlotBase dependant)
{
dependantsField.Add(dependant);
EnumAll(plot => plot.NotifyCompositionChange());
- }
+ }
}
private void RemoveDependant(PlotBase dependant)
@@ -335,7 +353,7 @@ private void EnumAll(Action action)
{
if (masterField != this)
{
- if(masterField != null)
+ if (masterField != null)
masterField.EnumAll(action);
}
else
@@ -425,6 +443,18 @@ public IObservable CompositionChange
#region Dependency Properties
+ ///
+ /// Identifies dependency property
+ ///
+ public static readonly DependencyProperty LeftBoundProperty =
+ DependencyProperty.Register("LeftBound", typeof(double?), typeof(PlotBase), new PropertyMetadata(null));
+
+ ///
+ /// Identifies dependency property
+ ///
+ public static readonly DependencyProperty RightBoundProperty =
+ DependencyProperty.Register("RightBound", typeof(double?), typeof(PlotBase), new PropertyMetadata(null));
+
///
/// Identifies dependency property
///
@@ -467,7 +497,7 @@ public IObservable CompositionChange
if (!plotBase.IsMaster)
{
plotBase.masterField.InvalidateMeasure();
- }
+ }
else
plotBase.InvalidateMeasure();
}
@@ -562,14 +592,14 @@ public IObservable CompositionChange
}));
/// Enables or disables clipping of graphic elements that are outside plotting area
- public bool ClipToBounds
+ new public bool ClipToBounds
{
get { return (bool)GetValue(ClipToBoundsProperty); }
set { SetValue(ClipToBoundsProperty, value); }
}
/// Identifies dependency property
- public static readonly DependencyProperty ClipToBoundsProperty =
+ new public static readonly DependencyProperty ClipToBoundsProperty =
DependencyProperty.Register("ClipToBounds", typeof(bool), typeof(PlotBase), new PropertyMetadata(true,
(s, a) => ((PlotBase)s).OnClipToBoundsChanged(a)));
@@ -579,7 +609,7 @@ public bool ClipToBounds
/// PropertyChanged parameters
protected virtual void OnClipToBoundsChanged(DependencyPropertyChangedEventArgs args)
{
- InvalidateMeasure();
+ InvalidateMeasure();
}
#endregion
@@ -594,14 +624,14 @@ protected virtual void OnPlotOriginXChanged(DependencyPropertyChangedEventArgs e
if (!IsInternalChange)
{
IsInternalChange = true;
- EnumAll(p =>
- {
+ EnumAll(p =>
+ {
p.PlotOriginX = (double)e.NewValue;
p.IsAutoFitEnabled = false;
p.InvalidateMeasure();
});
IsInternalChange = false;
- }
+ }
}
///
@@ -637,7 +667,7 @@ protected virtual void OnPlotWidthChanged(DependencyPropertyChangedEventArgs e)
p.InvalidateMeasure();
});
IsInternalChange = false;
- }
+ }
}
///
@@ -655,7 +685,7 @@ protected virtual void OnPlotHeightChanged(DependencyPropertyChangedEventArgs e)
p.InvalidateMeasure();
});
IsInternalChange = false;
- }
+ }
}
///
@@ -827,7 +857,7 @@ protected void SetPlotRect(DataRect plotRect, bool fromAutoFit)
p.InvalidateMeasure();
}
});
-
+
IsInternalChange = false;
}
@@ -921,7 +951,7 @@ protected Size PerformAsMaster(Size availableSize)
if (double.IsNaN(availableSize.Width)
|| double.IsNaN(availableSize.Height)
|| double.IsInfinity(availableSize.Width)
- || double.IsInfinity(availableSize.Height))
+ || double.IsInfinity(availableSize.Height))
availableSize = new Size(100, 100);
if (IsMaster)
{
diff --git a/src/Plots/BingMaps/BingMapsChart.cs b/src/Plots/BingMaps/BingMapsChart.cs
index 7d1696d..9cd7376 100644
--- a/src/Plots/BingMaps/BingMapsChart.cs
+++ b/src/Plots/BingMaps/BingMapsChart.cs
@@ -1,5 +1,6 @@
// Copyright (c) Microsoft Corporation. All Rights Reserved.
// Licensed under the MIT License.
+#if NETFRAMEWORK
using System;
using System.Windows;
@@ -107,3 +108,4 @@ protected override Thickness AggregatePadding()
}
}
+#endif
\ No newline at end of file
diff --git a/src/Plots/Markers/DynamicMarkerViewModel.cs b/src/Plots/Markers/DynamicMarkerViewModel.cs
index 76389a8..644e667 100644
--- a/src/Plots/Markers/DynamicMarkerViewModel.cs
+++ b/src/Plots/Markers/DynamicMarkerViewModel.cs
@@ -61,7 +61,7 @@ public static Type GenerateMarkerViewModelType(DataCollection collection)
if (mb == null)
{
AssemblyName aName = new AssemblyName("InteractiveDataDisplayAssembly2");
- AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
+ AssemblyBuilder ab = AssemblyBuilder.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
mb = ab.DefineDynamicModule(aName.Name);
}
TypeBuilder tb = mb.DefineType("DynamicMarkerViewModel_" + (typeModelCount++).ToString(CultureInfo.InvariantCulture),
@@ -115,7 +115,7 @@ public static Type GenerateDataCollectionType(DataCollection collection)
if (mb == null)
{
AssemblyName aName = new AssemblyName("InteractiveDataDisplayAssembly1");
- AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
+ AssemblyBuilder ab = AssemblyBuilder.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
mb = ab.DefineDynamicModule(aName.Name);
}
diff --git a/src/Themes/Generic.xaml b/src/Themes/Generic.xaml
index 7a1788d..a753c9b 100644
--- a/src/Themes/Generic.xaml
+++ b/src/Themes/Generic.xaml
@@ -35,6 +35,8 @@
PlotWidth="{Binding PlotWidth, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
PlotOriginX="{Binding PlotOriginX, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
PlotOriginY="{Binding PlotOriginY, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
+ LeftBound="{Binding LeftBound, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
+ RightBound="{Binding RightBound, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
IsXAxisReversed = "{Binding IsXAxisReversed, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
IsYAxisReversed = "{Binding IsXAxisReversed, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
IsAutoFitEnabled="{Binding IsAutoFitEnabled, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"