From e469a31e037069b066abbd8af6eb914dc316a4ee Mon Sep 17 00:00:00 2001 From: deepa_thiruppathy Date: Fri, 31 May 2024 15:03:26 +0530 Subject: [PATCH 1/7] WPF-888586 revampe the stecil sample based on latest stencil updates --- .../StencilDiagramElements/App.config | 6 +- .../StencilDiagramElements/MainWindow.xaml | 152 ++++++++++-------- .../StencilDiagramElements/MainWindow.xaml.cs | 100 +++++++++++- .../StencilDiagramElements.csproj | 15 +- .../StencilDiagramElements/packages.config | 6 +- 5 files changed, 199 insertions(+), 80 deletions(-) diff --git a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/App.config b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/App.config index 8e156463..a2d15d38 100644 --- a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/App.config +++ b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml index 5e381123..597e07ad 100644 --- a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml +++ b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml @@ -5,50 +5,50 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:StencilDiagramElements" mc:Ignorable="d" - xmlns:Syncfusion="http://schemas.syncfusion.com/wpf" - xmlns:Stencil="clr-namespace:Syncfusion.UI.Xaml.Diagram.Stencil;assembly=Syncfusion.SfDiagram.Wpf" + xmlns:syncfusion="http://schemas.syncfusion.com/wpf" + xmlns:stencil="clr-namespace:Syncfusion.UI.Xaml.Diagram.Stencil;assembly=Syncfusion.SfDiagram.Wpf" xmlns:RulerControl="clr-namespace:Syncfusion.UI.Xaml.Diagram.Controls;assembly=Syncfusion.SfDiagram.Wpf" xmlns:diagramcontrol="clr-namespace:Syncfusion.UI.Xaml.Diagram;assembly=Syncfusion.SfDiagram.WPF" Title="MainWindow" Height="450" Width="800"> - + - + - + - + - + - - + - + - + - + - - - + + + - - - + + + - - - - + + + + @@ -58,7 +58,7 @@ - - - - - + - - + + + - - - - + + + - - - - - - - - - - + + + - - - + \ No newline at end of file diff --git a/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/StencilSymbolViewModel.csproj b/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/StencilSymbolViewModel.csproj index 31fda54b..f44a4c1f 100644 --- a/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/StencilSymbolViewModel.csproj +++ b/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/StencilSymbolViewModel.csproj @@ -8,11 +8,12 @@ WinExe StencilSymbolViewModel StencilSymbolViewModel - v4.5 + v4.6.2 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 true + AnyCPU @@ -34,14 +35,14 @@ 4 - - packages\Syncfusion.Licensing.21.1.35\lib\net45\Syncfusion.Licensing.dll + + packages\Syncfusion.Licensing.25.2.6\lib\net462\Syncfusion.Licensing.dll - - packages\Syncfusion.SfDiagram.WPF.21.1.35\lib\net45\Syncfusion.SfDiagram.WPF.dll + + packages\Syncfusion.SfDiagram.WPF.25.2.6\lib\net462\Syncfusion.SfDiagram.WPF.dll - - packages\Syncfusion.Shared.WPF.21.1.35\lib\net45\Syncfusion.Shared.WPF.dll + + packages\Syncfusion.Shared.WPF.25.2.6\lib\net462\Syncfusion.Shared.WPF.dll diff --git a/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/packages.config b/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/packages.config index a94d0a60..05c09899 100644 --- a/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/packages.config +++ b/Samples/Stencil/Stencil-with-symbols/StencilSymbolViewModel/packages.config @@ -1,6 +1,6 @@  - - - + + + \ No newline at end of file From dff8a55a22f4f748a60f7901db52eb73d6cca0b1 Mon Sep 17 00:00:00 2001 From: deepa_thiruppathy Date: Fri, 31 May 2024 17:25:29 +0530 Subject: [PATCH 3/7] WPF-888586 revamped the stencil sample --- .../StencilCategory/App.config | 2 +- .../StencilCategory/MainWindow.xaml | 124 ++++++------------ .../StencilCategorySample.csproj | 14 +- .../StencilCategory/packages.config | 6 +- 4 files changed, 51 insertions(+), 95 deletions(-) diff --git a/Samples/Stencil/StencilCategory/StencilCategory/App.config b/Samples/Stencil/StencilCategory/StencilCategory/App.config index 2d2a12d8..8d234373 100644 --- a/Samples/Stencil/StencilCategory/StencilCategory/App.config +++ b/Samples/Stencil/StencilCategory/StencilCategory/App.config @@ -1,6 +1,6 @@ - + diff --git a/Samples/Stencil/StencilCategory/StencilCategory/MainWindow.xaml b/Samples/Stencil/StencilCategory/StencilCategory/MainWindow.xaml index f31abd52..7ffd344d 100644 --- a/Samples/Stencil/StencilCategory/StencilCategory/MainWindow.xaml +++ b/Samples/Stencil/StencilCategory/StencilCategory/MainWindow.xaml @@ -6,44 +6,45 @@ xmlns:local="clr-namespace:StencilCategorySample" mc:Ignorable="d" xmlns:RulerControl="clr-namespace:Syncfusion.UI.Xaml.Diagram.Controls;assembly=Syncfusion.SfDiagram.Wpf" - xmlns:Stencil="clr-namespace:Syncfusion.UI.Xaml.Diagram.Stencil;assembly=Syncfusion.SfDiagram.Wpf" - xmlns:Syncfusion="http://schemas.syncfusion.com/wpf" + xmlns:stencil="clr-namespace:Syncfusion.UI.Xaml.Diagram.Stencil;assembly=Syncfusion.SfDiagram.Wpf" + xmlns:syncfusion="http://schemas.syncfusion.com/wpf" Title="MainWindow" Height="450" Width="800"> - + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + + @@ -63,71 +64,26 @@ HorizontalAlignment="Left" Margin="10,5,0,5" Grid.Row="0"/> - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - + diff --git a/Samples/Stencil/StencilCategory/StencilCategory/StencilCategorySample.csproj b/Samples/Stencil/StencilCategory/StencilCategory/StencilCategorySample.csproj index bb4dd29a..0832882f 100644 --- a/Samples/Stencil/StencilCategory/StencilCategory/StencilCategorySample.csproj +++ b/Samples/Stencil/StencilCategory/StencilCategory/StencilCategorySample.csproj @@ -8,7 +8,7 @@ WinExe StencilCategorySample StencilCategorySample - v4.6 + v4.6.2 512 {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 4 @@ -36,14 +36,14 @@ 4 - - packages\Syncfusion.Licensing.21.1.35\lib\net46\Syncfusion.Licensing.dll + + packages\Syncfusion.Licensing.25.2.6\lib\net462\Syncfusion.Licensing.dll - - packages\Syncfusion.SfDiagram.WPF.21.1.35\lib\net46\Syncfusion.SfDiagram.WPF.dll + + packages\Syncfusion.SfDiagram.WPF.25.2.6\lib\net462\Syncfusion.SfDiagram.WPF.dll - - packages\Syncfusion.Shared.WPF.21.1.35\lib\net46\Syncfusion.Shared.WPF.dll + + packages\Syncfusion.Shared.WPF.25.2.6\lib\net462\Syncfusion.Shared.WPF.dll diff --git a/Samples/Stencil/StencilCategory/StencilCategory/packages.config b/Samples/Stencil/StencilCategory/StencilCategory/packages.config index 71fff89d..05c09899 100644 --- a/Samples/Stencil/StencilCategory/StencilCategory/packages.config +++ b/Samples/Stencil/StencilCategory/StencilCategory/packages.config @@ -1,6 +1,6 @@  - - - + + + \ No newline at end of file From d965a59eb74aae7fcfe31e48c623412af3715ead Mon Sep 17 00:00:00 2001 From: deepa_thiruppathy Date: Mon, 3 Jun 2024 20:27:21 +0530 Subject: [PATCH 4/7] WPF-869035 sample added for the KB How to change the color of Node using Key. --- Samples/Node/NodeStyleBasedOnKey/README.md | 13 + .../StencilDiagramElements/App.config | 6 + .../StencilDiagramElements/App.xaml | 9 + .../StencilDiagramElements/App.xaml.cs | 17 ++ .../StencilDiagramElements/MainWindow.xaml | 224 ++++++++++++++++++ .../StencilDiagramElements/MainWindow.xaml.cs | 31 +++ .../Properties/AssemblyInfo.cs | 55 +++++ .../Properties/Resources.Designer.cs | 63 +++++ .../Properties/Resources.resx | 117 +++++++++ .../Properties/Settings.Designer.cs | 26 ++ .../Properties/Settings.settings | 7 + .../StencilDiagramElements.csproj | 108 +++++++++ .../StencilDiagramElements.sln | 25 ++ .../StencilDiagramElements/packages.config | 6 + 14 files changed, 707 insertions(+) create mode 100644 Samples/Node/NodeStyleBasedOnKey/README.md create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.config create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml.cs create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml.cs create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/AssemblyInfo.cs create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.Designer.cs create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.resx create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.Designer.cs create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.settings create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.csproj create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.sln create mode 100644 Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/packages.config diff --git a/Samples/Node/NodeStyleBasedOnKey/README.md b/Samples/Node/NodeStyleBasedOnKey/README.md new file mode 100644 index 00000000..7f78e02f --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/README.md @@ -0,0 +1,13 @@ +# Different style for Nodes based on Key value + +This repository contains sample which shows how to apply different style nodes based on its key value in [WPF Diagram](https://www.syncfusion.com/wpf-controls/diagram) (SfDiagram). + + +## Project pre-requisites +To run this application, you need to have the below two in your system + +* [Visual Studio 2019](https://www.visualstudio.com/wpf-vs) +* [Syncfusion.SfDiagram.WPF](https://www.nuget.org/packages/Syncfusion.SfDiagram.WPF/) nuget package. To install the package using NuGet Package Manager, refer this [link](https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio#nuget-package-manager). + +## Deploying and running the sample +* To debug the sample and then run it, press F5 or select Debug > Start Debugging. To run the sample without debugging, press Ctrl+F5 or selectDebug > Start Without Debugging. diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.config b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.config new file mode 100644 index 00000000..8d234373 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml new file mode 100644 index 00000000..4a591ab4 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml.cs b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml.cs new file mode 100644 index 00000000..25c0faf3 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace StencilDiagramElements +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml new file mode 100644 index 00000000..ca372a2b --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml.cs b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml.cs new file mode 100644 index 00000000..32f82063 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/MainWindow.xaml.cs @@ -0,0 +1,31 @@ +using Syncfusion.UI.Xaml.Diagram; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace StencilDiagramElements +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + } + } +} diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/AssemblyInfo.cs b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..9f8bf2b9 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StencilDiagramElements")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("StencilDiagramElements")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.Designer.cs b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.Designer.cs new file mode 100644 index 00000000..181bbb2f --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace StencilDiagramElements.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StencilDiagramElements.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.resx b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.Designer.cs b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.Designer.cs new file mode 100644 index 00000000..9c739bf1 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace StencilDiagramElements.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.settings b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.csproj b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.csproj new file mode 100644 index 00000000..1f524d13 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.csproj @@ -0,0 +1,108 @@ + + + + + Debug + AnyCPU + {E15DB11B-274C-4738-89B9-D2D15A51B8FE} + WinExe + StencilDiagramElements + StencilDiagramElements + v4.6.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 + + + + packages\Syncfusion.Licensing.25.2.6\lib\net462\Syncfusion.Licensing.dll + + + packages\Syncfusion.SfDiagram.WPF.25.2.6\lib\net462\Syncfusion.SfDiagram.WPF.dll + + + packages\Syncfusion.Shared.WPF.25.2.6\lib\net462\Syncfusion.Shared.WPF.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 + + + + + + + \ No newline at end of file diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.sln b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.sln new file mode 100644 index 00000000..9da47682 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/StencilDiagramElements.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29519.161 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StencilDiagramElements", "StencilDiagramElements.csproj", "{E15DB11B-274C-4738-89B9-D2D15A51B8FE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E15DB11B-274C-4738-89B9-D2D15A51B8FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E15DB11B-274C-4738-89B9-D2D15A51B8FE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E15DB11B-274C-4738-89B9-D2D15A51B8FE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E15DB11B-274C-4738-89B9-D2D15A51B8FE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AD06D5BE-CE10-403D-9FE5-E30477919FB8} + EndGlobalSection +EndGlobal diff --git a/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/packages.config b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/packages.config new file mode 100644 index 00000000..05c09899 --- /dev/null +++ b/Samples/Node/NodeStyleBasedOnKey/StencilDiagramElements/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From db736abe8c170389eb42109eabbf552cb16699df Mon Sep 17 00:00:00 2001 From: deepa_thiruppathy Date: Tue, 11 Jun 2024 19:29:45 +0530 Subject: [PATCH 5/7] Samples are revamped for symbol group view model implementation. --- .../StencilDiagramElements/MainWindow.xaml | 13 +- .../StencilDiagramElements.csproj | 12 +- .../StencilDiagramElements/packages.config | 6 +- .../BasicSymbolGroupViewModel/README.md | 13 ++ .../Sample/App.config | 6 + .../BasicSymbolGroupViewModel/Sample/App.xaml | 9 ++ .../Sample/App.xaml.cs | 17 +++ .../Sample/MainWindow.xaml | 106 ++++++++++++++++ .../Sample/MainWindow.xaml.cs | 30 +++++ .../Sample/Properties/AssemblyInfo.cs | 55 ++++++++ .../Sample/Properties/Resources.Designer.cs | 71 +++++++++++ .../Sample/Properties/Resources.resx | 117 ++++++++++++++++++ .../Sample/Properties/Settings.Designer.cs | 30 +++++ .../Sample/Properties/Settings.settings | 7 ++ .../Sample/SymbolGroupViewModels.csproj | 108 ++++++++++++++++ .../Sample/SymbolGroupViewModels.sln | 28 +++++ .../Sample/packages.config | 6 + 17 files changed, 623 insertions(+), 11 deletions(-) create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/README.md create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.config create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/AssemblyInfo.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.Designer.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.resx create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.Designer.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.settings create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.csproj create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.sln create mode 100644 Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/packages.config diff --git a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml index 597e07ad..a84eea01 100644 --- a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml +++ b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/MainWindow.xaml @@ -70,6 +70,8 @@ + + + + + + + @@ -158,7 +165,8 @@ ExpandMode="ZeroOrMore" BorderBrush="#dfdfdf" BorderThickness="1" - GroupMappingName="Key"> + GroupMappingName="Key" + TitleTemplate="{StaticResource TitleTemplate}"> @@ -244,5 +252,6 @@ - + + diff --git a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/StencilDiagramElements.csproj b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/StencilDiagramElements.csproj index 1f524d13..b298ea3a 100644 --- a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/StencilDiagramElements.csproj +++ b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/StencilDiagramElements.csproj @@ -35,14 +35,14 @@ 4 - - packages\Syncfusion.Licensing.25.2.6\lib\net462\Syncfusion.Licensing.dll + + packages\Syncfusion.Licensing.26.1.35\lib\net462\Syncfusion.Licensing.dll - - packages\Syncfusion.SfDiagram.WPF.25.2.6\lib\net462\Syncfusion.SfDiagram.WPF.dll + + packages\Syncfusion.SfDiagram.WPF.26.1.35\lib\net462\Syncfusion.SfDiagram.WPF.dll - - packages\Syncfusion.Shared.WPF.25.2.6\lib\net462\Syncfusion.Shared.WPF.dll + + packages\Syncfusion.Shared.WPF.26.1.35\lib\net462\Syncfusion.Shared.WPF.dll diff --git a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/packages.config b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/packages.config index 05c09899..904e84e8 100644 --- a/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/packages.config +++ b/Samples/Stencil/Stencil-with-node-connector-group/StencilDiagramElements/packages.config @@ -1,6 +1,6 @@  - - - + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/README.md b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/README.md new file mode 100644 index 00000000..a6949bf9 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/README.md @@ -0,0 +1,13 @@ +# SymbolGroupViewModel sample + +This sample demonstrate how to create the symbol group view model to the stencil with symbols, name, category source properties. + +__*Documentation*__: https://help.syncfusion.com/wpf/diagram/serialization +## Project pre-requisites +To run this application, you need to have the below two in your system + +* [Visual Studio 2019](https://www.visualstudio.com/wpf-vs) +* [Syncfusion.SfDiagram.WPF](https://www.nuget.org/packages/Syncfusion.SfDiagram.WPF/) nuget package. To install the package using NuGet Package Manager, refer this [link](https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio#nuget-package-manager). + +## Deploying and running the sample +* To debug the sample and then run it, press F5 or select Debug > Start Debugging. To run the sample without debugging, press Ctrl+F5 or selectDebug > Start Without Debugging. diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.config b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.config new file mode 100644 index 00000000..b50c74f3 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml new file mode 100644 index 00000000..6f39d108 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml.cs b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml.cs new file mode 100644 index 00000000..8effb1c5 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace SymbolGroupViewModelScenarios +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml new file mode 100644 index 00000000..b003580b --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml.cs b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml.cs new file mode 100644 index 00000000..c1178c0e --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/MainWindow.xaml.cs @@ -0,0 +1,30 @@ +using Syncfusion.UI.Xaml.Diagram; +using Syncfusion.UI.Xaml.Diagram.Stencil; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace SymbolGroupViewModelScenarios +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + } + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/AssemblyInfo.cs b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..6050c3b0 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SymbolGroupViewModelScenarios")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SymbolGroupViewModelScenarios")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.Designer.cs b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.Designer.cs new file mode 100644 index 00000000..a1d9d249 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SymbolGroupViewModelScenarios.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SymbolGroupViewModelScenarios.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.resx b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.Designer.cs b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.Designer.cs new file mode 100644 index 00000000..62283fe6 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SymbolGroupViewModelScenarios.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.settings b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.csproj b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.csproj new file mode 100644 index 00000000..b08123f4 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.csproj @@ -0,0 +1,108 @@ + + + + + Debug + AnyCPU + {9C892DA8-0232-4664-9635-C88E8C4A4F4D} + WinExe + SymbolGroupViewModelScenarios + SymbolGroupViewModelScenarios + v4.6.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\Syncfusion.Licensing.26.1.35\lib\net462\Syncfusion.Licensing.dll + + + packages\Syncfusion.SfDiagram.WPF.26.1.35\lib\net462\Syncfusion.SfDiagram.WPF.dll + + + packages\Syncfusion.Shared.WPF.26.1.35\lib\net462\Syncfusion.Shared.WPF.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 + + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.sln b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.sln new file mode 100644 index 00000000..652db9ec --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/SymbolGroupViewModels.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34723.18 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SymbolGroupViewModels", "SymbolGroupViewModels.csproj", "{9C892DA8-0232-4664-9635-C88E8C4A4F4D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + Release-Xml|Any CPU = Release-Xml|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9C892DA8-0232-4664-9635-C88E8C4A4F4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C892DA8-0232-4664-9635-C88E8C4A4F4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C892DA8-0232-4664-9635-C88E8C4A4F4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C892DA8-0232-4664-9635-C88E8C4A4F4D}.Release|Any CPU.Build.0 = Release|Any CPU + {9C892DA8-0232-4664-9635-C88E8C4A4F4D}.Release-Xml|Any CPU.ActiveCfg = Release|Any CPU + {9C892DA8-0232-4664-9635-C88E8C4A4F4D}.Release-Xml|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {06AF6191-EDA4-4569-BE09-88583EBB156C} + EndGlobalSection +EndGlobal diff --git a/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/packages.config b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/packages.config new file mode 100644 index 00000000..904e84e8 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/BasicSymbolGroupViewModel/Sample/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From 3301087ceb804bfc88d1b57ca7ee726069cdcd80 Mon Sep 17 00:00:00 2001 From: deepa_thiruppathy Date: Tue, 11 Jun 2024 19:58:31 +0530 Subject: [PATCH 6/7] added sample for symbol group view models with menu items. --- .../SymbolGroupsWithContextMenu/README.md | 13 ++ .../Sample/App.config | 6 + .../Sample/App.xaml | 9 + .../Sample/App.xaml.cs | 17 ++ .../Sample/Images/Arrow Up -03.png | Bin 0 -> 2645 bytes .../Sample/Images/Cut.png | Bin 0 -> 939 bytes .../Sample/Images/Delete.png | Bin 0 -> 10477 bytes .../Sample/Images/Edit Annotation.png | Bin 0 -> 396 bytes .../Sample/Images/Folder-Copy.png | Bin 0 -> 452 bytes .../Sample/Images/Road-Backward.png | Bin 0 -> 2424 bytes .../Sample/Images/Trash-WF.png | Bin 0 -> 5030 bytes .../Sample/Images/User-Login.png | Bin 0 -> 3381 bytes .../Sample/Images/iconheader.png | Bin 0 -> 26350 bytes .../Sample/MainWindow.xaml | 170 ++++++++++++++++++ .../Sample/MainWindow.xaml.cs | 93 ++++++++++ .../Sample/Properties/AssemblyInfo.cs | 55 ++++++ .../Sample/Properties/Resources.Designer.cs | 71 ++++++++ .../Sample/Properties/Resources.resx | 117 ++++++++++++ .../Sample/Properties/Settings.Designer.cs | 30 ++++ .../Sample/Properties/Settings.settings | 7 + .../Sample/StencilCategory.csproj | 138 ++++++++++++++ .../Sample/StencilCategory.sln | 28 +++ .../Sample/ViewModel/StencilViewModel.cs | 110 ++++++++++++ .../Sample/packages.config | 6 + 24 files changed, 870 insertions(+) create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/README.md create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.config create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Arrow Up -03.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Cut.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Delete.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Edit Annotation.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Folder-Copy.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Road-Backward.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Trash-WF.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/User-Login.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/iconheader.png create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/AssemblyInfo.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.Designer.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.resx create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.Designer.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.settings create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.csproj create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.sln create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/ViewModel/StencilViewModel.cs create mode 100644 Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/packages.config diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/README.md b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/README.md new file mode 100644 index 00000000..b0e0e90e --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/README.md @@ -0,0 +1,13 @@ +# SymbolGroupViewModel with context menu sample + +This sample demonstrate how to create the symbol group view model with context menu lsit to the stencil. + +__*Documentation*__: https://help.syncfusion.com/wpf/diagram/serialization +## Project pre-requisites +To run this application, you need to have the below two in your system + +* [Visual Studio 2019](https://www.visualstudio.com/wpf-vs) +* [Syncfusion.SfDiagram.WPF](https://www.nuget.org/packages/Syncfusion.SfDiagram.WPF/) nuget package. To install the package using NuGet Package Manager, refer this [link](https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio#nuget-package-manager). + +## Deploying and running the sample +* To debug the sample and then run it, press F5 or select Debug > Start Debugging. To run the sample without debugging, press Ctrl+F5 or selectDebug > Start Without Debugging. diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.config b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.config new file mode 100644 index 00000000..56efbc7b --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml new file mode 100644 index 00000000..1decf20f --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml.cs b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml.cs new file mode 100644 index 00000000..ccfadbd6 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace StencilCategory +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Arrow Up -03.png b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Arrow Up -03.png new file mode 100644 index 0000000000000000000000000000000000000000..07ef47289eb5bc5902185ec23ee77521c9791750 GIT binary patch literal 2645 zcmds3`#%)g7T@#0ud`^MUKLvr*&M_PDk5LUz?g#q_3|}z2w_gl$q^H^YamqVw2oL zT^ak8 zSs2b7Nd;yEF=YhIFb((Q4gYpE-OCld0I}tgO z68iC~A&*X2rlLIDHf*}UDmS)H9}oF9xu*ujj}h3R!>h#fhHDDsa}tO^Fpn;Xonxq?%*qwg}= zeO-C#sD~&9Fc?kMOmJ$PcU?;+&@ofL-|h)O8;mI4f}T!vsc&;H3lvnozu^Ds66E>d zphuHj5DIL69OC79jng;LAu-=zEK|MScn!A~OiCw8TAyz|?pG<>9~D(g;@76CQ@2Y; z%ZI$!SgaZ;+9uPefom#Y4WnRG|8|u3KbiK{(Lk9sR)4J7GQPa|BEAo>uE;rgZrJL2Zl zCd*^i4fGNgvZ49b(C`dyVO40F1Q7OHyv2l<43D+^f za1-L$*#Y=vxxUgveO&v6s;VkoqI4~5v=JoW*Qc_i#R%mU#Y1n42mZ({!R)w`Zbl(^ zk7Qdssjk+8QI!^-a$wMD&Fb)uB{|K=Lf+7X0Hudc4xb(NUI$a5Z0D-a$<@`p2)lOKAG5{CJc_S9TsPZamc`Lij zPq$bwBrWaA;WKuu(4%I@7Y`qGRXg0TQCypX!CWH-GE5|#0;SF_?1JD#W5tnZ6TAVi z$-1aZTMja0`E=jwKTJFrWD~xq&U5I9)aZ4ajyvCPBw3@CD^IyOp5!v!wK`(gdnahpP=AXK~Z8H(64VH5XcI@Yk|a!pvJncC%Eef+^zc| z!OKYe9yn0h52V@WEBFWUk9?j-zAog`ALjsSCV*$eu(g!_R{1xfWH|Abi7ExhH1*hN zY29V_)4iXdD)$DU6cbf|+Xw;FzoF<|j*i1J(#{S*)rRtd<)21bI!bfJ;sx0znagXx z)s*sZ2A?a(s&dpIt7auwIXipFkV*yc53ld){TITjp(5YWi9+#b3s1^xnPHGI`)@b( z)#HuW*q$&gU8!y7T&$9C!$$}_9l#AXFyjH@2OIzIi?L(dh<)l8udjrip7T5_Jn#Gb z3%jCW^G2WlEZ&Z7LSYTZ&JlrohWxW%RLT|2(>Y)G(eYPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D13*bcK~!i%?U`Lj z6+slo&+M$4X7oW2S(0Q3MWJXW77~4+7)e1727&Y-MbSeaPkmSrN%m3+LLn9=gefG7 za3wJM5HqB}FbV`g5Q;*gD6+hFb~|%+%xj=fGs`CI@8!&#*~{JkoHJ);?q#V@Ub!%b zv6P*&gaU#l6c99_fS?Hl1WhPl5_jkgxWhxLH#6?1F%W${s;7@R0YX5msb2MFMzk~m z`!TM1`WO?yGBUw=-ZN_yX!bkr16z}&Jo=aukemWm*1B1vK(n8^09bm4^5|o95nFi$ z;PgHQ_uZ)SOyPd}3QnXQSZ==Zn8B=oqU~hG-P>g2aoU=}9sdrzXovEc!KeV1nFTB@ z9Yl9zS`_5$3luL;@0jmy7 z`~=a_N;;)?)r?+&elgbP=|K3h#C z)Qz;MQL~s8fN2t|y$s?(C-Aa;v~XoL;^h@|iHX)!Q8Y|qOn~!t5GD>EpxQ5CIa8-j zc}kTy-CZzIS^ods$YRZn5ItT=xjzX@Nl`5X4{^U4`v|eB6A-&`m3C`gv;~Ov7OFT2 z*Bc-y(hHV6%poi}nJh8SYg@Smkl6kR5*zR{g98w|RY!gu^aV8D1pCxEu-0y%g=<$F z@&*RAOHEhfhh zTHt9b!5tY^o_|9x0+<@|*NFH{%ISXw4DZJD!f~+NP2j%hQ#}RV(EfbxZ_yGUQ$x;v zwB|fTL*9o)eJ$8WPpT)Tuq%&I$_Ts{%V%j3W6H@}oDTZ`kzoX))n~wY`jB3RA3OrQ zut*I~NAAv|p^mH+ZeO}a*GwJ4Kly?t6c99_fS?Hl1WhO)Xy&*8fM2+q7vkWTt_=VH N002ovPDHLkV1k;Hn>PRe literal 0 HcmV?d00001 diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Delete.png b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Delete.png new file mode 100644 index 0000000000000000000000000000000000000000..545e511723146a73a98cefba91be19f7eedc0850 GIT binary patch literal 10477 zcmW++bzBtR*PdOLW$6~aNP`H1ut;}EhlF%4Al)F1uuDiPASqoUENKuDvebgojf5;+ zf`pVHy!(6qn9t1p%$+-P=bU?Ct)H10DxRmL&XpPK=?}#0E6OBR(_RE z|7-ahsw)F^Bg{Ma2Ex_Q5#rm#J{so!06@|6zXR0oUHJ?Ec%w8`l#GIH z_6sOom}d+6w>thakIFUjvMRU#_Cbp62sPRiPf4@OC0;Iy%JOG_!cvpjKBnAlt)W9Z zfg`Q^_ExmFD;7f2(j990XhiHKqg%W-IIyzhrKHB$7b8M?nJmM>+3U1u?G2aBj;nux zg><#;)dlB)PJvEm=cvHP(N|-E1ujpcbcG7u6hllyX zMOlhh%g(JBXKgA_9$!*IDyQ6VnjEqx)qJa@^@Y`|{%QRjDw3@aLB?7pOqHM@f-T;E zMM<_OQg=g==A!}7Xq3P|Vw-++AoN{uK|KRxro>#bJ!vw88h<#kU0h1OjM;|QT><+i zm)C0Bw3<;6b`buZE)~s?7 z>@E#5l`m6G!e=C~M`M{%t-fhFUM+RvFI{^@b8(1h_QLa#PVE>Fu_BCFE;QoZ-u%D( zlclkx)#ZDoO0T=>0Kh#fQrQ4iyozahxg>#F_~p6>F<4=Nia(Ipa`*$$S|0Kid}L7twgQha@D zhfM*M3o21S3dS*+Tw5wEwUjzq39KJyxKkF8ETs_J@2+=D&bHO>k?4O}mBDOfZ>8B> zcV+vDN2wj2)yX_71o4ke-58(n4VGw`VDa((^8J1TLZyIIt(7)(aK$+Qi3;dBuZ!9H z%dHm@&e8B%gvaLK_wT#L%?S@ufhml{b<+!+$=UrKySTWkrx &Dw{5X`AFmSuH

e&kV{k+K%1YWWJoF%L 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 JrA`?U^?z%Cf_MM` literal 0 HcmV?d00001 diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Edit Annotation.png b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Edit Annotation.png new file mode 100644 index 0000000000000000000000000000000000000000..a830f08b58da377ff8295b2e1f065b531c6f9fb6 GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!21QR7$B+p3x6=)~S{wviv&EU2nVo^C{{bV< zp4P_Brl!X7j{;Q;2XEZCa^`@GfkD89HOr!Jwa&~;cM)SN`+azMclr=t{A30J2BrsZWeQ~2FPXHK#x8tcJ#F8#MH&lUTRo}d3l!NnMZa@x`y~@zp2Ig7 zx)wF8T4gq&a^Avquiws8;8>6;H9>{b=Q7Lr&)aIZ*eU;F<(sR*$#=NnNvi+eSe6fZ z>IxClRJY|;PnVw|{me2c}pf~=@GCW{wKh6?orux|p7=jF*u6{1-oD!M!lvI6;>1s;*b3=DjSL74G){)!Z!hDc8r$B+!?x6}7$9SRU>_qTqg$`r{mf1#e! z%Ivk9OI8GbWL#1V#N8ztVlh5%t!MZ#US9iPhV2C1?EgpN4~jYOd34hALydQxdhos{ zcP3Z++wEV-Ros=G8pxO#;vgkD!HsnZkg25~@FMNp+_NuiIRa9P?PZjn2Cq19H^E{3 zXUkPNc468}YQ715sFgq2bNu6sdp7)`W^b6jM)7vC3pYNFIdc83o)EwPWX>SFR=p&? zzRj(2ZptchdB1Cy)M(ka@+lQu%$k@Qx#FKtn1Wg zI$P$rV*W;t{|D4IaOWi7HhWm^A1u}QKfi9WMc?K18$4gK_{cw5b=mW}gKCsU_xx>I zy$vsa=qzge;-Se~&3$v5ul~Aj>)i*-mfUfFu<5Sb(dLN_FD)M|yS{j{8?z|?o8&3d qbDb`&XfV-I=;iWQ%mifWxWq>++xM4go+Bt)7(8A5T-G@yGywpp!nRES literal 0 HcmV?d00001 diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Road-Backward.png b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/Road-Backward.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4e99ab7ba068b5c9decbff4a0bc8158e984c41 GIT binary patch literal 2424 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 ZTw&`|I%Xt70($BITg&4XrDmS7{{h6)z%&2= literal 0 HcmV?d00001 diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/iconheader.png b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Images/iconheader.png new file mode 100644 index 0000000000000000000000000000000000000000..ff31ec744fd422adb4488bdf0084f10a5c14c48a GIT binary patch literal 26350 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 literal 0 HcmV?d00001 diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml new file mode 100644 index 00000000..6a94eb4e --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml.cs b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml.cs new file mode 100644 index 00000000..06983885 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/MainWindow.xaml.cs @@ -0,0 +1,93 @@ +using StencilCategory.ViewModel; +using Syncfusion.UI.Xaml.Diagram; +using Syncfusion.UI.Xaml.Diagram.Controls; +using Syncfusion.UI.Xaml.Diagram.Stencil; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel.DataAnnotations; +using System.Diagnostics.SymbolStore; +using System.Globalization; +using System.Linq; +using System.Reflection; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Xml.Linq; + +namespace StencilCategory +{ + ///

+ /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + + private string temp; + + public MainWindow() + { + InitializeComponent(); + stencil11.Expanded += Stencil11_Expanded1; + stencil11.MenuItemClicked += Stencil_MenuItemClicked; + } + + private void Stencil11_Expanded1(object sender, SymbolGroupExpandCollapseEventArgs args) + { + temp = args.GroupName.ToString(); + } + + + + private void Stencil_MenuItemClicked(object sender, MenuItemClickedEventArgs args) + { + + if (args.Item.Content.ToString() == "Delete") + { + for (int i = 0; i < stencil11.SymbolGroups.Count; i++) + { + var v = stencil11.SymbolGroups[i]; + if ((v as SymbolGroupViewModel).Name == temp) + { + stencil11.SymbolGroups.RemoveAt(i); + break; + } + } + } + else + { + for (int i = 0; i < stencil11.SymbolGroups.Count; i++) + { + var v = stencil11.SymbolGroups[i]; + if ((v as SymbolGroupViewModel).Name == temp) + { + if (args.Item.Content.ToString() == "Move Up") + { + stencil11.SymbolGroups.Move(i, i - 1); + break; + } + else + { + stencil11.SymbolGroups.Move(i, i + 1); + break; + } + } + } + } + } + + + + private void MainWindow_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + + } + } + + public class DiagramMenuItems : ObservableCollection + { + public DiagramMenuItems() { } + } + + +} diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/AssemblyInfo.cs b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0194cae0 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StencilCategory")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("StencilCategory")] +[assembly: AssemblyCopyright("Copyright © 2023")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.Designer.cs b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.Designer.cs new file mode 100644 index 00000000..275c042f --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace StencilCategory.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StencilCategory.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.resx b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.Designer.cs b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.Designer.cs new file mode 100644 index 00000000..986b1772 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace StencilCategory.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.settings b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.csproj b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.csproj new file mode 100644 index 00000000..771e1625 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.csproj @@ -0,0 +1,138 @@ + + + + + Debug + AnyCPU + {5A2CD646-E44B-42D2-A317-88BB8D478FE8} + WinExe + StencilCategory + StencilCategory + v4.7.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\Syncfusion.Licensing.26.1.35\lib\net462\Syncfusion.Licensing.dll + + + packages\Syncfusion.SfDiagram.WPF.26.1.35\lib\net462\Syncfusion.SfDiagram.WPF.dll + + + packages\Syncfusion.Shared.WPF.26.1.35\lib\net462\Syncfusion.Shared.WPF.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 + Designer + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + Always + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.sln b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.sln new file mode 100644 index 00000000..8f0ae9ba --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/StencilCategory.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.7.34024.191 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StencilCategory", "StencilCategory.csproj", "{5A2CD646-E44B-42D2-A317-88BB8D478FE8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + Release-Xml|Any CPU = Release-Xml|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5A2CD646-E44B-42D2-A317-88BB8D478FE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A2CD646-E44B-42D2-A317-88BB8D478FE8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A2CD646-E44B-42D2-A317-88BB8D478FE8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A2CD646-E44B-42D2-A317-88BB8D478FE8}.Release|Any CPU.Build.0 = Release|Any CPU + {5A2CD646-E44B-42D2-A317-88BB8D478FE8}.Release-Xml|Any CPU.ActiveCfg = Release|Any CPU + {5A2CD646-E44B-42D2-A317-88BB8D478FE8}.Release-Xml|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4820CACB-08D3-4DA4-B3FA-97AA9B2FD47C} + EndGlobalSection +EndGlobal diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/ViewModel/StencilViewModel.cs b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/ViewModel/StencilViewModel.cs new file mode 100644 index 00000000..80fc9446 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/ViewModel/StencilViewModel.cs @@ -0,0 +1,110 @@ +using Syncfusion.UI.Xaml.Diagram; +using Syncfusion.UI.Xaml.Diagram.Stencil; +using System.Collections.Generic; +using System.Linq; +using System.Windows; + +namespace StencilCategory.ViewModel +{ + public class StencilViewModel : DiagramViewModel + { + + private SymbolGroupDisplayMode symbolGroupDisplayMode = SymbolGroupDisplayMode.Accordion; + + + public StencilViewModel() + { + //Symbolfilters = new SymbolFilters(); + //symbolfilters.Add(AddNewFilter("All", true)); + //symbolfilters.Add(AddNewFilter("Basic Shapes Filter", true)); + //symbolfilters.Add(AddNewFilter("Flow Shapes Filter", true)); + //symbolfilters.Add(AddNewFilter("Arrow Shapes Filter", true)); + //symbolfilters.Add(AddNewFilter("DataFlow Shapes Filter")); + //symbolfilters.Add(AddNewFilter("UMLActivity Shapes Filter")); + //symbolfilters.Add(AddNewFilter("UMLUseCase Shapes Filter", true)); + //symbolfilters.Add(AddNewFilter("UMLRelationship Shapes Filter")); + //symbolfilters.Add(AddNewFilter("Swimlane Shapes Filter", true)); + //symbolfilters.Add(AddNewFilter("BPMNEditor Shapes Filter")); + //this.Selectedfilter = Symbolfilters[0]; + } + + //private SymbolFilterProvider AddNewFilter(string name, bool isChecked = false) + //{ + // var filter = new SymbolFilterProvider + // { + // Content = name, + // IsChecked = isChecked, + // SymbolFilter = Filter, + // }; + + + // return filter; + //} + + //private bool Filter(SymbolFilterProvider sender, object symbol) + //{ + // var content = sender.Content.ToString(); + // content = content.Replace(" Filter", ""); + // if(content == "All") return true; + // if (content == (symbol as DiagramElementViewModel).Key.ToString()) + // return true; + + // return false; + //} + + //private SymbolFilters symbolfilters; + + //public SymbolFilters Symbolfilters + //{ + // get + // { + // return symbolfilters; + // } + // set + // { + // symbolfilters = value; + // symbolfilters.CollectionChanged += Symbolfilters_CollectionChanged; + // OnPropertyChanged("Symbolfilters"); + // } + //} + + //private void Symbolfilters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) + //{ + + //} + + //private SymbolFilterProvider selectedfilter; + + //public SymbolFilterProvider Selectedfilter + //{ + // get + // { + // return selectedfilter; + // } + // set + // { + // selectedfilter = value; + // OnPropertyChanged("Selectedfilter"); + // } + //} + + public SymbolGroupDisplayMode SymbolGroupDisplayMode + { + get + { + return symbolGroupDisplayMode; + } + set + { + symbolGroupDisplayMode = value; + OnPropertyChanged("SymbolGroupDisplayMode"); + } + } + + + + + + + } +} diff --git a/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/packages.config b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/packages.config new file mode 100644 index 00000000..1f246751 --- /dev/null +++ b/Samples/Stencil/SymbolGroupViewModel/SymbolGroupsWithContextMenu/Sample/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From bd53484d98e73eb0f9b2cc577ddd5d742c4d09be Mon Sep 17 00:00:00 2001 From: KarkuvelRajan <63278195+KarkuvelRajan@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:09:01 +0530 Subject: [PATCH 7/7] WPF-888586 Changes are added WPF-888586 Changes are added --- .../Stencil/StencilCustomCommands/README.md | 13 ++ .../StencilCustomCommand.sln | 28 +++++ .../StencilCustomCommand/App.config | 6 + .../StencilCustomCommand/App.xaml | 9 ++ .../StencilCustomCommand/App.xaml.cs | 17 +++ .../StencilCustomCommand/MainWindow.xaml | 103 +++++++++++++++ .../StencilCustomCommand/MainWindow.xaml.cs | 68 ++++++++++ .../Properties/AssemblyInfo.cs | 55 ++++++++ .../Properties/Resources.Designer.cs | 71 +++++++++++ .../Properties/Resources.resx | 117 ++++++++++++++++++ .../Properties/Settings.Designer.cs | 30 +++++ .../Properties/Settings.settings | 7 ++ .../StencilCustomCommand.csproj | 109 ++++++++++++++++ .../StencilCustomCommand/Utility/Command.cs | 82 ++++++++++++ .../StencilCustomCommand/packages.config | 6 + 15 files changed, 721 insertions(+) create mode 100644 Samples/Stencil/StencilCustomCommands/README.md create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand.sln create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.config create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml.cs create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml.cs create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/AssemblyInfo.cs create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.Designer.cs create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.resx create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.Designer.cs create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.settings create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/StencilCustomCommand.csproj create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Utility/Command.cs create mode 100644 Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/packages.config diff --git a/Samples/Stencil/StencilCustomCommands/README.md b/Samples/Stencil/StencilCustomCommands/README.md new file mode 100644 index 00000000..50249425 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/README.md @@ -0,0 +1,13 @@ +# Stencil with Custom Commands +This repository contains sample which shows how can we Add or Remove commands from the Stencil's Command Manager. + +__*Documentation*__: https://help.syncfusion.com/wpf/diagram/stencil + +## Project pre-requisites +To run this application, you need to have the below two in your system + +* [Visual Studio 2019](https://www.visualstudio.com/wpf-vs) +* [Syncfusion.SfDiagram.WPF](https://www.nuget.org/packages/Syncfusion.SfDiagram.WPF/) nuget package. To install the package using NuGet Package Manager, refer this [link](https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio#nuget-package-manager). + +## Deploying and running the sample +* To debug the sample and then run it, press F5 or select Debug > Start Debugging. To run the sample without debugging, press Ctrl+F5 or selectDebug > Start Without Debugging. diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand.sln b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand.sln new file mode 100644 index 00000000..6139420a --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StencilCustomCommand", "StencilCustomCommand\StencilCustomCommand.csproj", "{7E911D50-4FC4-4000-864F-B6746AD59C03}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + Release-Xml|Any CPU = Release-Xml|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7E911D50-4FC4-4000-864F-B6746AD59C03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E911D50-4FC4-4000-864F-B6746AD59C03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E911D50-4FC4-4000-864F-B6746AD59C03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E911D50-4FC4-4000-864F-B6746AD59C03}.Release|Any CPU.Build.0 = Release|Any CPU + {7E911D50-4FC4-4000-864F-B6746AD59C03}.Release-Xml|Any CPU.ActiveCfg = Release|Any CPU + {7E911D50-4FC4-4000-864F-B6746AD59C03}.Release-Xml|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5D803A3C-1FBA-4643-AB77-C8F08484C4DC} + EndGlobalSection +EndGlobal diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.config b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.config new file mode 100644 index 00000000..b50c74f3 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml new file mode 100644 index 00000000..84c827e9 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml.cs b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml.cs new file mode 100644 index 00000000..95c5243c --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace StencilCustomCommand +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml new file mode 100644 index 00000000..77372083 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml.cs b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml.cs new file mode 100644 index 00000000..f3d17b38 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/MainWindow.xaml.cs @@ -0,0 +1,68 @@ +using StencilCustomCommand.Utility; +using Syncfusion.UI.Xaml.Diagram; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace StencilCustomCommand +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + + AddCommand(); + RemoveCommand(); + + } + + ICommand CustomCommand; + + private void AddCommand() + { + // Adding a custom command to the stencil CommandManager + CustomCommand = new Command(OnCustomCommand); + GestureCommand customCommmandGesture = new GestureCommand() + { + Command = CustomCommand, + Gesture = new Gesture + { + Key = Key.K, + KeyModifiers = ModifierKeys.Control, + KeyState = KeyStates.Down + }, + Name = "Custom", + }; + Stencil.CommandManager.Commands.Add(customCommmandGesture); + } + private void OnCustomCommand(object obj) + { + // Perform Operations + MessageBox.Show("Custom Command Executed Successfully!"); + } + + private void RemoveCommand() + { + // Removing a particular stencil command from the CommandManager + string commandName = "SelectAll"; + IGestureCommand commandToBeRemoved = Stencil.CommandManager.Commands.FirstOrDefault(command => command.Name.Equals(commandName)); + Stencil.CommandManager.Commands.Remove(commandToBeRemoved); + } + + } +} diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/AssemblyInfo.cs b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c456a4b7 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StencilCustomCommand")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("StencilCustomCommand")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.Designer.cs b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.Designer.cs new file mode 100644 index 00000000..9dd4158a --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace StencilCustomCommand.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StencilCustomCommand.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.resx b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.Designer.cs b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.Designer.cs new file mode 100644 index 00000000..e9851124 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace StencilCustomCommand.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.settings b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/StencilCustomCommand.csproj b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/StencilCustomCommand.csproj new file mode 100644 index 00000000..720b2110 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/StencilCustomCommand.csproj @@ -0,0 +1,109 @@ + + + + + Debug + AnyCPU + {7E911D50-4FC4-4000-864F-B6746AD59C03} + WinExe + StencilCustomCommand + StencilCustomCommand + v4.6.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Syncfusion.Licensing.26.1.35\lib\net462\Syncfusion.Licensing.dll + + + ..\packages\Syncfusion.SfDiagram.WPF.26.1.35\lib\net462\Syncfusion.SfDiagram.WPF.dll + + + ..\packages\Syncfusion.Shared.WPF.26.1.35\lib\net462\Syncfusion.Shared.WPF.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 + + + + + + + \ No newline at end of file diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Utility/Command.cs b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Utility/Command.cs new file mode 100644 index 00000000..3d9127e7 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/Utility/Command.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace StencilCustomCommand.Utility +{ + internal class Command : ICommand + { + /// + /// Occurs when changes occur that affect whether the command should execute. + /// + public event EventHandler CanExecuteChanged; + + Func canExecute; + Action executeAction; + bool canExecuteCache; + + /// + /// Initializes a new instance of the class. + /// + /// The execute action. + /// The can execute. + public Command(Action executeAction, + Func canExecute = null) + { + this.executeAction = executeAction; + this.canExecute = canExecute; + + } + + #region ICommand Members + /// + /// Defines the method that determines whether the command + /// can execute in its current state. + /// + /// + /// Data used by the command. + /// If the command does not require data to be passed, + /// this object can be set to null. + /// + /// + /// true if this command can be executed; otherwise, false. + /// + public bool CanExecute(object parameter) + { + if (canExecute == null) + { + return true; + } + bool tempCanExecute = canExecute(parameter); + + if (canExecuteCache != tempCanExecute) + { + canExecuteCache = tempCanExecute; + if (CanExecuteChanged != null) + { + CanExecuteChanged(this, new EventArgs()); + } + } + + return canExecuteCache; + } + + /// + /// Defines the method to be called when the command is invoked. + /// + /// + /// Data used by the command. + /// If the command does not require data to be passed, + /// this object can be set to null. + /// + public void Execute(object parameter) + { + executeAction(parameter); + } + #endregion + } + +} diff --git a/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/packages.config b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/packages.config new file mode 100644 index 00000000..904e84e8 --- /dev/null +++ b/Samples/Stencil/StencilCustomCommands/StencilCustomCommand/StencilCustomCommand/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file