[NUI] Xaml intellisense support (#853)
authorXianbing Teng <xb.teng@samsung.com>
Fri, 24 May 2019 09:31:16 +0000 (17:31 +0800)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Fri, 24 May 2019 09:31:16 +0000 (18:31 +0900)
* [NUI] Add XAML intellisense support (#834)

I merge this PR to xaml-support branch first to fix some build and packaging files with other commits.
After works in xaml-support branch, I will merge it to master later.

* [Build] Add Tizen.NUI.Design and dependent runtime assemblies to nuget

* [Build] Add dummy assemblies to nuget instead of reference assemblies

16 files changed:
.gitignore
build/build.proj
packaging/Tizen.NET.API5.5.0.0.14629.nupkg [moved from packaging/Tizen.NET.API5.5.0.0.14562.nupkg with 53% similarity]
pkg/Tizen.NET.API6.nuspec [changed mode: 0644->0755]
pkg/Tizen.NET.nuspec
src/Tizen.NUI.Design/Properties/AssemblyInfo.cs [new file with mode: 0755]
src/Tizen.NUI.Design/Tizen.NUI.Design.csproj [new file with mode: 0755]
src/Tizen.NUI.Design/Tizen.NUI.Design.sln [new file with mode: 0755]
src/Tizen.NUI.Design/Tizen.NUI.Design/AttributeTableBuilder.cs [new file with mode: 0755]
src/Tizen.NUI.Design/Tizen.NUI.Design/RegisterMetadata.cs [new file with mode: 0755]
src/Tizen.NUI.Design/Tizen.NUI/AttributeTableBuilder.cs [new file with mode: 0755]
src/Tizen.NUI.Design/Tizen.NUI/RegisterMetadata.cs [new file with mode: 0755]
src/Tizen.NUI.Design/lib/Microsoft.Windows.Design.Extensibility.dll [new file with mode: 0755]
src/Tizen.NUI.Design/lib/System.Xaml.dll [new file with mode: 0755]
src/Tizen.NUI/Properties/AssemblyInfo.cs
src/Tizen.NUI/src/public/BaseComponents/View.cs

index a67fca6..46608c6 100644 (file)
@@ -209,3 +209,4 @@ CompilationErrors-*.txt
 
 # exceptional allowed binaries
 !tools/bin/
+!packaging/*.nupkg
index 4b13227..0b1c7ae 100644 (file)
     Target : Clean
     ==============
     Delete all artifacts,
-    including the Artifacts/ directory and the obj/ directories for all projects.
+    including the Artifacts/ directory and the obj and bin directories of all projects.
   -->
   <Target Name="Clean">
 
     <ItemGroup>
-      <ProjectIntermediateAllFiles Include="$(ProjectSrcDir)**\obj\*" />
-      <ProjectIntermediateAllFiles Include="$(InternalProjectSrcDir)**\obj\*" />
+      <ProjectIntermediateAllFiles Include="$(ProjectSrcDir)**\obj\**" />
+      <ProjectIntermediateAllFiles Include="$(ProjectSrcDir)**\bin\**" />
+      <ProjectIntermediateAllFiles Include="$(InternalProjectSrcDir)**\obj\**" />
+      <ProjectIntermediateAllFiles Include="$(InternalProjectSrcDir)**\bin\**" />
       <ProjectIntermediateDir Include="@(ProjectIntermediateAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
     </ItemGroup>
 
similarity index 53%
rename from packaging/Tizen.NET.API5.5.0.0.14562.nupkg
rename to packaging/Tizen.NET.API5.5.0.0.14629.nupkg
index 82e659e..91fa070 100644 (file)
Binary files a/packaging/Tizen.NET.API5.5.0.0.14562.nupkg and b/packaging/Tizen.NET.API5.5.0.0.14629.nupkg differ
old mode 100644 (file)
new mode 100755 (executable)
index 85b2d8c..2b13497
@@ -9,11 +9,12 @@
     <licenseUrl>https://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
     <projectUrl>https://www.tizen.org/</projectUrl>
     <iconUrl>https://developer.tizen.org/sites/default/files/images/tizen-pinwheel-on-light-rgb_64_64.png</iconUrl>
-    <description>Reference assemblies of Tizen .NET API Level 5.</description>
+    <description>Reference assemblies of Tizen .NET API Level 6.</description>
     <copyright>© Samsung Electronics Co., Ltd All Rights Reserved</copyright>
   </metadata>
   <files>
-    <file src="Artifacts\bin\public\ref\*.dll"  target="ref\netstandard2.0" />
+    <file src="Artifacts\bin\dummy\*.dll"  target="ref\netstandard2.0" />
     <file src="Artifacts\bin\public\*.xml"  target="ref\netstandard2.0" />
+    <file src="Artifacts\bin\design\Tizen.NUI.Design.dll" target="ref\netstandard2.0\Design" />
   </files>
 </package>
index df95c28..cac505a 100644 (file)
@@ -17,7 +17,7 @@
         <dependency id="Microsoft.NETCore.Platforms" version="2.0.0" />
       </group>
       <group targetFramework="Tizen5.0">
-        <dependency id="Tizen.NET.API5" version="5.0.0.14562" />
+        <dependency id="Tizen.NET.API5" version="5.0.0.14629" />
         <dependency id="Microsoft.NETCore.Platforms" version="2.0.0" />
       </group>
       <group targetFramework="Tizen6.0">
diff --git a/src/Tizen.NUI.Design/Properties/AssemblyInfo.cs b/src/Tizen.NUI.Design/Properties/AssemblyInfo.cs
new file mode 100755 (executable)
index 0000000..130e42a
--- /dev/null
@@ -0,0 +1,5 @@
+using Microsoft.Windows.Design.Metadata;
+
+[assembly: ProvideMetadata(typeof(Tizen.NUI.Design.RegisterMetadata))]
+[assembly: ProvideMetadata(typeof(Tizen.NUI.RegisterMetadata))]
+
diff --git a/src/Tizen.NUI.Design/Tizen.NUI.Design.csproj b/src/Tizen.NUI.Design/Tizen.NUI.Design.csproj
new file mode 100755 (executable)
index 0000000..4b9e740
--- /dev/null
@@ -0,0 +1,26 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.0</TargetFramework>
+    <ArtifactsDirectory>$(OutputBaseDir)bin\design\</ArtifactsDirectory>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\Tizen.NUI\Tizen.NUI.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="lib\" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Reference Include="Microsoft.Windows.Design.Extensibility">
+      <HintPath>lib\Microsoft.Windows.Design.Extensibility.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System.Xaml">
+      <HintPath>lib\System.Xaml.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+  </ItemGroup>
+</Project>
diff --git a/src/Tizen.NUI.Design/Tizen.NUI.Design.sln b/src/Tizen.NUI.Design/Tizen.NUI.Design.sln
new file mode 100755 (executable)
index 0000000..9ee267a
--- /dev/null
@@ -0,0 +1,106 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.26124.0
+MinimumVisualStudioVersion = 15.0.26124.0
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI.Design", "Tizen.NUI.Design.csproj", "{437EC878-67BA-44B7-A5CC-597E527529BA}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.NUI", "..\Tizen.NUI\Tizen.NUI.csproj", "{3460F2F8-A053-4255-A322-3CD9FCFFFCC4}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Applications.Common", "..\Tizen.Applications.Common\Tizen.Applications.Common.csproj", "{6A2F2282-47D8-4548-AEA6-469A81AB5A49}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.System.SystemSettings", "..\Tizen.System.SystemSettings\Tizen.System.SystemSettings.csproj", "{68D8E9A7-7E28-4670-9307-BFA55E244375}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen", "..\Tizen\Tizen.csproj", "{805A4116-A49A-47B5-8730-DC1907E264D6}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tizen.Log", "..\Tizen.Log\Tizen.Log.csproj", "{837994B4-B99D-4EFE-B6FF-1BE17EE78711}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Any CPU = Debug|Any CPU
+               Debug|x64 = Debug|x64
+               Debug|x86 = Debug|x86
+               Release|Any CPU = Release|Any CPU
+               Release|x64 = Release|x64
+               Release|x86 = Release|x86
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Debug|x64.Build.0 = Debug|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Debug|x86.Build.0 = Debug|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Release|Any CPU.Build.0 = Release|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Release|x64.ActiveCfg = Release|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Release|x64.Build.0 = Release|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Release|x86.ActiveCfg = Release|Any CPU
+               {437EC878-67BA-44B7-A5CC-597E527529BA}.Release|x86.Build.0 = Release|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Debug|x64.Build.0 = Debug|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Debug|x86.Build.0 = Debug|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Release|Any CPU.Build.0 = Release|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Release|x64.ActiveCfg = Release|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Release|x64.Build.0 = Release|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Release|x86.ActiveCfg = Release|Any CPU
+               {3460F2F8-A053-4255-A322-3CD9FCFFFCC4}.Release|x86.Build.0 = Release|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Debug|x64.Build.0 = Debug|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Debug|x86.Build.0 = Debug|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Release|Any CPU.Build.0 = Release|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Release|x64.ActiveCfg = Release|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Release|x64.Build.0 = Release|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Release|x86.ActiveCfg = Release|Any CPU
+               {6A2F2282-47D8-4548-AEA6-469A81AB5A49}.Release|x86.Build.0 = Release|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Debug|x64.Build.0 = Debug|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Debug|x86.Build.0 = Debug|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Release|Any CPU.Build.0 = Release|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Release|x64.ActiveCfg = Release|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Release|x64.Build.0 = Release|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Release|x86.ActiveCfg = Release|Any CPU
+               {68D8E9A7-7E28-4670-9307-BFA55E244375}.Release|x86.Build.0 = Release|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Debug|x64.Build.0 = Debug|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Debug|x86.Build.0 = Debug|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Release|Any CPU.Build.0 = Release|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Release|x64.ActiveCfg = Release|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Release|x64.Build.0 = Release|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Release|x86.ActiveCfg = Release|Any CPU
+               {805A4116-A49A-47B5-8730-DC1907E264D6}.Release|x86.Build.0 = Release|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Debug|Any CPU.Build.0 = Debug|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Debug|x64.ActiveCfg = Debug|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Debug|x64.Build.0 = Debug|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Debug|x86.ActiveCfg = Debug|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Debug|x86.Build.0 = Debug|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Release|Any CPU.ActiveCfg = Release|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Release|Any CPU.Build.0 = Release|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Release|x64.ActiveCfg = Release|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Release|x64.Build.0 = Release|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Release|x86.ActiveCfg = Release|Any CPU
+               {837994B4-B99D-4EFE-B6FF-1BE17EE78711}.Release|x86.Build.0 = Release|Any CPU
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+       GlobalSection(ExtensibilityGlobals) = postSolution
+               SolutionGuid = {C7E6D7C7-44EB-4EE0-88C6-38FC82EC41BD}
+       EndGlobalSection
+EndGlobal
diff --git a/src/Tizen.NUI.Design/Tizen.NUI.Design/AttributeTableBuilder.cs b/src/Tizen.NUI.Design/Tizen.NUI.Design/AttributeTableBuilder.cs
new file mode 100755 (executable)
index 0000000..3422de8
--- /dev/null
@@ -0,0 +1,61 @@
+using System;
+using System.ComponentModel;
+using Microsoft.Windows.Design;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Binding;
+
+namespace Tizen.NUI.Design
+{
+    internal class AttributeTableBuilder : Microsoft.Windows.Design.Metadata.AttributeTableBuilder
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public AttributeTableBuilder()
+        {
+            // Turn off validation of values, which doesn't work for OnPlatform/OnIdiom
+            AddCustomAttributes(typeof(View).Assembly,
+                new XmlnsSupportsValidationAttribute("http://tizen.org/Tizen.NUI/2018/XAML", false));
+
+            // Style isn't a view, make it visible
+            AddCallback(typeof(Style), builder => builder.AddCustomAttributes(
+               new EditorBrowsableAttribute(EditorBrowsableState.Always),
+               new global::System.Windows.Markup.ContentPropertyAttribute("Setters"),
+               // Since the class doesn't have a public parameterless ctor, we need to provide a converter
+               new global::System.ComponentModel.TypeConverterAttribute(typeof(StringConverter))));
+
+            // The Setter.Value can actually come from an <OnPlatform />, so enable it as Content.
+            AddCallback(typeof(Setter), builder => builder.AddCustomAttributes(
+              new EditorBrowsableAttribute(EditorBrowsableState.Always),
+              new global::System.Windows.Markup.ContentPropertyAttribute("Value")));
+
+            // Special case for FontSize which isn't an enum.
+            //var fontElements = typeof(View).Assembly.ExportedTypes.Where(t => typeof(IFontElement).IsAssignableFrom(t));
+            //foreach (var fontElement in fontElements)
+            //{
+            //    AddCallback(fontElement, builder => builder.AddCustomAttributes(
+            //       "FontSize",
+            //       new global::System.ComponentModel.TypeConverterAttribute(typeof(NonExclusiveEnumConverter<NamedSize>))));
+            //}
+        }
+    }
+
+    internal class AnythingConverter : global::System.ComponentModel.TypeConverter
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
+        {
+            return true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
+        {
+            return true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public override bool IsValid(ITypeDescriptorContext context, object value)
+        {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.NUI.Design/Tizen.NUI.Design/RegisterMetadata.cs b/src/Tizen.NUI.Design/Tizen.NUI.Design/RegisterMetadata.cs
new file mode 100755 (executable)
index 0000000..2014973
--- /dev/null
@@ -0,0 +1,11 @@
+using Microsoft.Windows.Design.Metadata;
+using System.ComponentModel;
+
+namespace Tizen.NUI.Design
+{
+    internal class RegisterMetadata : IProvideAttributeTable
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public AttributeTable AttributeTable => new AttributeTableBuilder().CreateTable();
+    }
+}
diff --git a/src/Tizen.NUI.Design/Tizen.NUI/AttributeTableBuilder.cs b/src/Tizen.NUI.Design/Tizen.NUI/AttributeTableBuilder.cs
new file mode 100755 (executable)
index 0000000..94e9a44
--- /dev/null
@@ -0,0 +1,70 @@
+using System;
+using System.ComponentModel;
+using System.Reflection;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.UIComponents;
+
+namespace Tizen.NUI
+{
+    internal class AttributeTableBuilder : Microsoft.Windows.Design.Metadata.AttributeTableBuilder
+    {
+        private void AddAttributesForTypes()
+        {
+            Type typeFromHandle = typeof(ContentPage);
+            typeFromHandle = typeof(PushButton);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(ContentPage);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            AddTypeAttributes(typeFromHandle, new global::System.Windows.Markup.ContentPropertyAttribute("Content"));
+            typeFromHandle = typeof(TextEditor);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(FlexContainer);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(ImageView);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(TextLabel);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(TextField);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(ProgressBar);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(ScrollView);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(ScrollBar);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(Slider);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(TableView);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            typeFromHandle = typeof(View);
+            AddTypeAttributes(typeFromHandle, new EditorBrowsableAttribute(EditorBrowsableState.Always));
+            AddTypeAttributes(typeFromHandle, new global::System.Windows.Markup.ContentPropertyAttribute("Children"));
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public AttributeTableBuilder() : base()
+        {
+            Assembly assembly = typeof(View).Assembly;
+            AddAssemblyAttributes(assembly, new global::System.Windows.Markup.XmlnsDefinitionAttribute("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI"));
+            AddAssemblyAttributes(assembly, new global::System.Windows.Markup.XmlnsDefinitionAttribute("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI.BaseComponents"));
+            AddAssemblyAttributes(assembly, new global::System.Windows.Markup.XmlnsDefinitionAttribute("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI.UIComponents"));
+            AddAssemblyAttributes(assembly, new global::System.Windows.Markup.XmlnsDefinitionAttribute("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI.Xaml"));
+            AddAttributesForTypes();
+        }
+
+        private void AddTypeAttributes(Type type, params Attribute[] attribs)
+        {
+            this.AddCallback(type, builder => builder.AddCustomAttributes(attribs));
+        }
+
+        private void AddMemberAttributes(Type type, string memberName, params Attribute[] attribs)
+        {
+            this.AddCallback(type, builder => builder.AddCustomAttributes(attribs));
+        }
+
+        private void AddAssemblyAttributes(Assembly assembly, params Attribute[] attribs)
+        {
+            this.AddCustomAttributes(assembly, attribs);
+        }
+    }
+}
diff --git a/src/Tizen.NUI.Design/Tizen.NUI/RegisterMetadata.cs b/src/Tizen.NUI.Design/Tizen.NUI/RegisterMetadata.cs
new file mode 100755 (executable)
index 0000000..e3c60ee
--- /dev/null
@@ -0,0 +1,11 @@
+using Microsoft.Windows.Design.Metadata;
+using System.ComponentModel;
+
+namespace Tizen.NUI
+{
+    internal class RegisterMetadata : IProvideAttributeTable
+    {
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public AttributeTable AttributeTable => new AttributeTableBuilder().CreateTable();
+    }
+}
diff --git a/src/Tizen.NUI.Design/lib/Microsoft.Windows.Design.Extensibility.dll b/src/Tizen.NUI.Design/lib/Microsoft.Windows.Design.Extensibility.dll
new file mode 100755 (executable)
index 0000000..bef5295
Binary files /dev/null and b/src/Tizen.NUI.Design/lib/Microsoft.Windows.Design.Extensibility.dll differ
diff --git a/src/Tizen.NUI.Design/lib/System.Xaml.dll b/src/Tizen.NUI.Design/lib/System.Xaml.dll
new file mode 100755 (executable)
index 0000000..8f54e79
Binary files /dev/null and b/src/Tizen.NUI.Design/lib/System.Xaml.dll differ
index 83880d4..4310065 100755 (executable)
@@ -2,6 +2,8 @@ using System.Runtime.CompilerServices;
 
 using Tizen.NUI;
 
+[assembly: InternalsVisibleTo("Tizen.NUI.Design, Publickey=0024000004800000940000000602000000240000525341310004000001000100d115b1004248416b12d21b626cfb17149c9303fe394693fd3b32d7872e89559a4fa96c98110c2e62eea48aca693bddbe17094ca8ea2e2cd79970ca590fb672b9b371b5d7002076817321f62d6483ea50c56dbd1f37b185a4c24c47718876e6ae6d266508c551170d4cbdda3f82edaff9405ee3d7857282d8269e8e518d2f0fb2")]
+
 // Xamarin.Forms.Loader.dll Xamarin.Forms.Xaml.XamlLoader.Load(object, string), kzu@microsoft.com
 [assembly: XmlnsDefinition("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI")]
 [assembly: XmlnsDefinition("http://tizen.org/Tizen.NUI/2018/XAML", "Tizen.NUI.BaseComponents")]
index 6f3fe28..883a1b8 100755 (executable)
@@ -90,6 +90,7 @@ namespace Tizen.NUI.BaseComponents
     /// View is the base class for all views.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
+    [ContentProperty("Children")]
     public class View : Container, IResourcesProvider
     {
         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.