[
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n"
  },
  {
    "path": "GridExtra.Shared/BreakPoints.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\n#if WINDOWS_WPF\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.ComponentModel;\n#elif WINDOWS_UWP\nusing Windows.Foundation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n#else\n#endif\n\nnamespace SourceChord.GridExtra\n{\n#if WINDOWS_WPF\n    [TypeConverter(typeof(BreakPointsTypeConverter))]\n#endif\n    public class BreakPoints : DependencyObject\n    {\n        public double XS_SM\n        {\n            get { return (double)GetValue(XS_SMProperty); }\n            set { SetValue(XS_SMProperty, value); }\n        }\n        // Using a DependencyProperty as the backing store for XS_SM.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_SMProperty =\n            DependencyProperty.Register(\"XS_SM\", typeof(double), typeof(BreakPoints), new PropertyMetadata(768.0));\n\n        public double SM_MD\n        {\n            get { return (double)GetValue(SM_MDProperty); }\n            set { SetValue(SM_MDProperty, value); }\n        }\n        // Using a DependencyProperty as the backing store for SM_MD.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_MDProperty =\n            DependencyProperty.Register(\"SM_MD\", typeof(double), typeof(BreakPoints), new PropertyMetadata(992.0));\n\n\n        public double MD_LG\n        {\n            get { return (double)GetValue(MD_LGProperty); }\n            set { SetValue(MD_LGProperty, value); }\n        }\n        // Using a DependencyProperty as the backing store for MD_LG.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_LGProperty =\n            DependencyProperty.Register(\"MD_LG\", typeof(double), typeof(BreakPoints), new PropertyMetadata(1200.0));\n\n        public BreakPoints()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "GridExtra.Shared/GridEx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Text;\n\n#if WINDOWS_WPF\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n#elif WINDOWS_UWP\nusing Windows.Foundation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n#else\n#endif\n\n\nnamespace SourceChord.GridExtra\n{\n#if WINDOWS_WPF\n    using LayoutUpdateEventHandler = EventHandler;\n#elif WINDOWS_UWP\n    using LayoutUpdateEventHandler = EventHandler<object>;\n#else\n#endif\n\n    public class AreaDefinition\n    {\n        public int Row { get; set; }\n        public int Column { get; set; }\n        public int RowSpan { get; set; }\n        public int ColumnSpan { get; set; }\n\n        public AreaDefinition(int row, int column, int rowSpan, int columnSpan)\n        {\n            this.Row = row;\n            this.Column = column;\n            this.RowSpan = rowSpan;\n            this.ColumnSpan = columnSpan;\n        }\n    }\n\n    public class NamedAreaDefinition : AreaDefinition\n    {\n        public string Name { get; set; }\n\n        public NamedAreaDefinition(string name, int row, int column, int rowSpan, int columnSpan)\n            : base(row, column, rowSpan, columnSpan)\n        {\n            this.Name = name;\n        }\n    }\n\n    struct GridLengthDefinition\n    {\n        public GridLength GridLength;\n        public double? Min;\n        public double? Max;\n    }\n\n    public static class GridEx\n    {\n        public static Orientation GetAutoFillOrientation(DependencyObject obj)\n        {\n            return (Orientation)obj.GetValue(AutoFillOrientationProperty);\n        }\n        public static void SetAutoFillOrientation(DependencyObject obj, Orientation value)\n        {\n            obj.SetValue(AutoFillOrientationProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for AutoFillOrientation.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty AutoFillOrientationProperty =\n            DependencyProperty.RegisterAttached(\"AutoFillOrientation\", typeof(Orientation), typeof(GridEx), new PropertyMetadata(Orientation.Horizontal));\n\n\n        public static bool GetAutoFillChildren(DependencyObject obj)\n        {\n            return (bool)obj.GetValue(AutoFillChildrenProperty);\n        }\n        public static void SetAutoFillChildren(DependencyObject obj, bool value)\n        {\n            obj.SetValue(AutoFillChildrenProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for AutoFillChildren.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty AutoFillChildrenProperty =\n            DependencyProperty.RegisterAttached(\"AutoFillChildren\", typeof(bool), typeof(GridEx), new PropertyMetadata(false, OnAutoFillChildrenChanged));\n\n        private static void OnAutoFillChildrenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var grid = d as Grid;\n            var isEnabled = (bool)e.NewValue;\n            if (grid == null) { return; }\n\n            if (isEnabled)\n            {\n                var layoutUpdateCallback = CreateLayoutUpdateHandler(grid);\n                // イベントの登録\n                grid.LayoutUpdated += layoutUpdateCallback;\n                SetLayoutUpdatedCallback(grid, layoutUpdateCallback);\n\n                // AutoFill処理を行う\n                AutoFill(grid);\n            }\n            else\n            {\n                // イベントの解除\n                var callback = GetLayoutUpdatedCallback(grid);\n                grid.LayoutUpdated -= callback;\n\n                // AutoFill処理のリセット\n                ClearAutoFill(grid);\n            }\n        }\n\n\n        private static LayoutUpdateEventHandler CreateLayoutUpdateHandler(Grid grid)\n        {\n            var prevCount = 0;\n            var prevColumn = grid.ColumnDefinitions.Count;\n            var prevRow = grid.RowDefinitions.Count;\n            var prevOrientation = GetAutoFillOrientation(grid);\n\n            var layoutUpdateCallback = new LayoutUpdateEventHandler((sender, args) =>\n            {\n                var count = grid.Children.Count;\n                var column = grid.ColumnDefinitions.Count;\n                var row = grid.RowDefinitions.Count;\n                var orientation = GetAutoFillOrientation(grid);\n\n                if (count != prevCount ||\n                    column != prevColumn ||\n                    row != prevRow ||\n                    orientation != prevOrientation)\n                {\n                    AutoFill(grid);\n                    prevCount = count;\n                    prevColumn = column;\n                    prevRow = row;\n                    prevOrientation = orientation;\n                }\n            });\n\n            return layoutUpdateCallback;\n        }\n\n        public static LayoutUpdateEventHandler GetLayoutUpdatedCallback(DependencyObject obj)\n        {\n            return (LayoutUpdateEventHandler)obj.GetValue(LayoutUpdatedCallbackProperty);\n        }\n        private static void SetLayoutUpdatedCallback(DependencyObject obj, LayoutUpdateEventHandler value)\n        {\n            obj.SetValue(LayoutUpdatedCallbackProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for LayoutUpdatedCallback.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LayoutUpdatedCallbackProperty =\n            DependencyProperty.RegisterAttached(\"LayoutUpdatedCallback\", typeof(LayoutUpdateEventHandler), typeof(GridEx), new PropertyMetadata(null));\n\n\n        private static void AutoFill(Grid grid)\n        {\n            var isEnabled = GetAutoFillChildren(grid);\n            var rowCount = grid.RowDefinitions.Count;\n            var columnCount = grid.ColumnDefinitions.Count;\n            var orientation = GetAutoFillOrientation(grid);\n\n            if (!isEnabled || rowCount == 0 || columnCount == 0) return;\n\n            var area = new bool[rowCount, columnCount];\n\n            var autoLayoutList = new List<FrameworkElement>();\n            // Grid内の位置固定要素のチェック\n            foreach (FrameworkElement child in grid.Children)\n            {\n                // AreaName ⇒ Areaの優先順位で、グリッド位置の設定を行う\n                var region = GetAreaNameRegion(child) ?? GetAreaRegion(child);\n                var isFixed = region != null;\n\n                if (isFixed)\n                {\n                    // 位置指定されているので、AutoFillReservedAreaに記録する\n                    var row = region.Row;\n                    var column = region.Column;\n                    var rowSpan = region.RowSpan;\n                    var columnSpan = region.ColumnSpan;\n\n                    for (var i = row; i < row + rowSpan; i++)\n                        for (var j = column; j < column + columnSpan; j++)\n                        {\n                            if (columnCount <= j || rowCount <= i) { continue; }\n                            area[i, j] = true;\n                        }\n                }\n                else\n                {\n                    // Gridの位置未設定の要素は、自動レイアウト対象としてリストに追加\n                    autoLayoutList.Add(child);\n                }\n\n            }\n\n            var count = 0;\n            var numOfCell = rowCount * columnCount;\n            var isHorizontal = orientation == Orientation.Horizontal;\n            var isOverflow = false;\n            // Gridの子要素を、順番にGrid内に並べていく\n            foreach (FrameworkElement child in autoLayoutList)\n            {\n                // Visibility.Collapsedの項目は除外する\n                if (child.Visibility == Visibility.Collapsed)\n                {\n                    continue;\n                }\n\n                while (true)\n                {\n                    var x = isHorizontal ? count % columnCount : count / rowCount;\n                    var y = isHorizontal ? count / columnCount : count % rowCount;\n                    var canArrange = isOverflow ? true : !area[y, x];\n                    if (canArrange)\n                    {\n                        Grid.SetRow(child, y);\n                        Grid.SetColumn(child, x);\n                        Grid.SetRowSpan(child, 1);\n                        Grid.SetColumnSpan(child, 1);\n                    }\n\n                    if (count + 1 < numOfCell)\n                    {\n                        count++;\n                    }\n                    else\n                    {\n                        isOverflow = true;\n                    }\n\n                    if (canArrange)\n                    {\n                        break;\n                    }\n                }\n\n            }\n        }\n\n        private static void ClearAutoFill(Grid grid)\n        {\n            foreach (FrameworkElement child in grid.Children)\n            {\n                child.ClearValue(Grid.RowProperty);\n                child.ClearValue(Grid.ColumnProperty);\n                child.ClearValue(Grid.RowSpanProperty);\n                child.ClearValue(Grid.ColumnSpanProperty);\n\n                UpdateItemPosition(child);\n            }\n        }\n\n\n        public static string GetColumnDefinition(DependencyObject obj)\n        {\n            return (string)obj.GetValue(ColumnDefinitionProperty);\n        }\n        public static void SetColumnDefinition(DependencyObject obj, string value)\n        {\n            obj.SetValue(ColumnDefinitionProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for ColumnDefinition.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty ColumnDefinitionProperty =\n            DependencyProperty.RegisterAttached(\"ColumnDefinition\", typeof(string), typeof(GridEx), new PropertyMetadata(null, OnColumnDefinitionChanged));\n\n        private static void OnColumnDefinitionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var grid = d as Grid;\n            var param = e.NewValue as string;\n\n            InitializeColumnDefinition(grid, param);\n\n            var template = GetTemplateArea(grid);\n            if (template != null)\n            {\n                InitializeTemplateArea(grid, template);\n            }\n        }\n\n        private static void InitializeColumnDefinition(Grid grid, string param)\n        {\n            if (grid == null || param == null)\n            {\n                return;\n            }\n\n            grid.ColumnDefinitions.Clear();\n\n            var list = param.Split(',')\n                            .Select(o => o.Trim());\n\n            foreach (var item in list)\n            {\n                var def = StringToGridLengthDefinition(item);\n                var columnDefinition = new ColumnDefinition() { Width = def.GridLength };\n                if (def.Max != null) { columnDefinition.MaxWidth = def.Max.Value; }\n                if (def.Min != null) { columnDefinition.MinWidth = def.Min.Value; }\n                grid.ColumnDefinitions.Add(columnDefinition);\n            }\n        }\n\n        public static string GetRowDefinition(DependencyObject obj)\n        {\n            return (string)obj.GetValue(RowDefinitionProperty);\n        }\n        public static void SetRowDefinition(DependencyObject obj, string value)\n        {\n            obj.SetValue(RowDefinitionProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for RowDefinition.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty RowDefinitionProperty =\n            DependencyProperty.RegisterAttached(\"RowDefinition\", typeof(string), typeof(GridEx), new PropertyMetadata(null, OnRowDefinitionChanged));\n\n        private static void OnRowDefinitionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var grid = d as Grid;\n            var param = e.NewValue as string;\n\n            InitializeRowDefinition(grid, param);\n\n            var template = GetTemplateArea(grid);\n            if (template != null)\n            {\n                InitializeTemplateArea(grid, template);\n            }\n        }\n\n        private static void InitializeRowDefinition(Grid grid, string param)\n        {\n            if (grid == null || param == null)\n            {\n                return;\n            }\n\n            grid.RowDefinitions.Clear();\n\n            var list = param.Split(',')\n                            .Select(o => o.Trim());\n\n            foreach (var item in list)\n            {\n                var def = StringToGridLengthDefinition(item);\n                var rowDefinition = new RowDefinition() { Height = def.GridLength };\n                if (def.Max != null) { rowDefinition.MaxHeight = def.Max.Value; }\n                if (def.Min != null) { rowDefinition.MinHeight = def.Min.Value; }\n                grid.RowDefinitions.Add(rowDefinition);\n            }\n        }\n\n        // ↓GridEx内部でだけ使用する、プライベートな添付プロパティ\n        public static IList<NamedAreaDefinition> GetAreaDefinitions(DependencyObject obj)\n        {\n            return (IList<NamedAreaDefinition>)obj.GetValue(AreaDefinitionsProperty);\n        }\n        private static void SetAreaDefinitions(DependencyObject obj, IList<NamedAreaDefinition> value)\n        {\n            obj.SetValue(AreaDefinitionsProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for AreaDefinitions.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty AreaDefinitionsProperty =\n            DependencyProperty.RegisterAttached(\"AreaDefinitions\", typeof(IList<NamedAreaDefinition>), typeof(GridEx), new PropertyMetadata(null));\n\n\n\n        public static string GetTemplateArea(DependencyObject obj)\n        {\n            return (string)obj.GetValue(TemplateAreaProperty);\n        }\n        public static void SetTemplateArea(DependencyObject obj, string value)\n        {\n            obj.SetValue(TemplateAreaProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for TemplateArea.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty TemplateAreaProperty =\n            DependencyProperty.RegisterAttached(\"TemplateArea\", typeof(string), typeof(GridEx), new PropertyMetadata(null, OnTemplateAreaChanged));\n\n        private static void OnTemplateAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var grid = d as Grid;\n            var param = e.NewValue as string;\n\n            if (d == null)\n            {\n                return;\n            }\n\n            // グリッドを一度初期化\n            grid.RowDefinitions.Clear();\n            grid.ColumnDefinitions.Clear();\n\n            // GridEx.RowDefinition/GridEx.ColumnDefinitionの設定内容で、行/列を初期化\n            InitializeRowDefinition(grid, GetRowDefinition(grid));\n            InitializeColumnDefinition(grid, GetColumnDefinition(grid));\n\n            if (param != null)\n            {\n                InitializeTemplateArea(grid, param);\n            }\n        }\n\n        private static void InitializeTemplateArea(Grid grid, string param)\n        {\n            // 行×列数のチェック\n            // 空行や、スペースを除去して、行×列のデータ構造に変形\n            var columns = param.Split(new[] { '\\n', '/' })\n                               .Select(o => o.Trim())\n                               .Where(o => !string.IsNullOrWhiteSpace(o))\n                               .Select(o => o.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));\n\n            // 行×列数のチェック\n            var num = columns.FirstOrDefault().Count();\n            var isValidRowColumn = columns.All(o => o.Count() == num);\n            if (!isValidRowColumn)\n            {\n                // Invalid Row Columns...\n                throw new ArgumentException(\"Invalid Row/Column definition.\");\n            }\n\n            // グリッド数を調整(不足分の行/列を足す)\n            var rowShortage = columns.Count() - grid.RowDefinitions.Count;\n            for (var i = 0; i < rowShortage; i++)\n            {\n                grid.RowDefinitions.Add(new RowDefinition());\n            }\n\n            var columnShortage = num - grid.ColumnDefinitions.Count;\n            for (var i = 0; i < columnShortage; i++)\n            {\n                grid.ColumnDefinitions.Add(new ColumnDefinition());\n            }\n\n            // Area定義をパース\n            var areaList = ParseAreaDefinition(columns);\n            SetAreaDefinitions(grid, areaList);\n\n            // 全体レイアウトの定義が変わったので、\n            // Gridの子要素のすべてのRegion設定を反映しなおす\n            foreach (FrameworkElement child in grid.Children)\n            {\n                UpdateItemPosition(child);\n            }\n        }\n\n\n        private static IList<NamedAreaDefinition> ParseAreaDefinition(IEnumerable<string[]> columns)\n        {\n            var result = new List<NamedAreaDefinition>();\n\n            // Regionが正しく連結されているかチェック\n            var flatten = columns.SelectMany(\n                    (item, index) => item.Select((o, xIndex) => new { row = index, column = xIndex, name = o })\n                );\n\n            var groups = flatten.GroupBy(o => o.name);\n            foreach (var group in groups)\n            {\n                var left = group.Min(o => o.column);\n                var top = group.Min(o => o.row);\n                var right = group.Max(o => o.column);\n                var bottom = group.Max(o => o.row);\n\n                var isValid = true;\n                for (var y = top; y <= bottom; y++)\n                    for (var x = left; x <= right; x++)\n                    {\n                        isValid = isValid && group.Any(o => o.column == x && o.row == y);\n                    }\n\n                if (!isValid)\n                {\n                    throw new ArgumentException($\"\\\"{group.Key}\\\" is invalid area definition.\");\n                }\n\n                result.Add(new NamedAreaDefinition(group.Key, top, left, bottom - top + 1, right - left + 1));\n            }\n\n            return result;\n        }\n\n        private static GridLengthDefinition StringToGridLengthDefinition(string source)\n        {\n            var r = new System.Text.RegularExpressions.Regex(@\"(^[^\\(\\)]+)(?:\\((.*)-(.*)\\))?\");\n            var m = r.Match(source);\n\n            var length = m.Groups[1].Value;\n            var min = m.Groups[2].Value;\n            var max = m.Groups[3].Value;\n\n            double temp;\n            var result = new GridLengthDefinition()\n            {\n                GridLength = StringToGridLength(length),\n                Min = double.TryParse(min, out temp) ? temp : (double?)null,\n                Max = double.TryParse(max, out temp) ? temp : (double?)null\n            };\n\n            return result;\n        }\n\n#if WINDOWS_WPF\n        private static GridLength StringToGridLength(string source)\n        {\n            var glc = TypeDescriptor.GetConverter(typeof(GridLength));\n            return (GridLength)glc.ConvertFromString(source);\n        }\n#elif WINDOWS_UWP\n        private static GridLength StringToGridLength(string source)\n        {\n            GridLength gridLength;\n            if (source.ToLower() == \"auto\")\n            {\n                gridLength = new GridLength(0.0, GridUnitType.Auto);\n            }\n            else\n            {\n                var r = new System.Text.RegularExpressions.Regex(@\"([\\d\\.]*)(\\*?)\");\n                var m = r.Match(source);\n\n                var val = m.Groups[1].Value;\n                var unit = m.Groups[2].Value;\n\n                double size;\n                var isValid = double.TryParse(val, out size);\n\n                if (unit == \"*\")\n                {\n                    if (string.IsNullOrEmpty(val))\n                    {\n                        gridLength = new GridLength(1, GridUnitType.Star);\n                    }\n                    else\n                    {\n                        if (!isValid) { throw new ArgumentException(); }\n                        gridLength = new GridLength(size, GridUnitType.Star);\n                    }\n                }\n                else if (string.IsNullOrEmpty(unit))\n                {\n                    if (!isValid) { throw new ArgumentException(); ; }\n                    gridLength = new GridLength(size, GridUnitType.Pixel);\n                }\n                else\n                {\n                    // 変換失敗\n                    throw new ArgumentException();\n                }\n            }\n\n            return gridLength;\n        }\n#else\n#endif\n\n\n        //=====================================================================\n        // Grid内の子要素に適用するための添付プロパティ類\n        //=====================================================================\n        public static string GetAreaName(DependencyObject obj)\n        {\n            return (string)obj.GetValue(AreaNameProperty);\n        }\n        public static void SetAreaName(DependencyObject obj, string value)\n        {\n            obj.SetValue(AreaNameProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for AreaName.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty AreaNameProperty =\n            DependencyProperty.RegisterAttached(\"AreaName\", typeof(string), typeof(GridEx), new PropertyMetadata(null, OnAreaNameChanged));\n\n        private static void OnAreaNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var ctrl = d as FrameworkElement;\n\n            if (ctrl == null)\n            {\n                return;\n            }\n\n            UpdateItemPosition(ctrl);\n\n            // 子要素全体のAutoFillを計算しなおす\n            var grid = ctrl.Parent as Grid;\n            var isAutoFill = GetAutoFillChildren(grid);\n            if (isAutoFill)\n            {\n                AutoFill(grid);\n            }\n        }\n\n        public static string GetArea(DependencyObject obj)\n        {\n            return (string)obj.GetValue(AreaProperty);\n        }\n        public static void SetArea(DependencyObject obj, string value)\n        {\n            obj.SetValue(AreaProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for Area.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty AreaProperty =\n            DependencyProperty.RegisterAttached(\"Area\", typeof(string), typeof(GridEx), new PropertyMetadata(null, OnAreaChanged));\n\n        private static void OnAreaChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var ctrl = d as FrameworkElement;\n\n            if (d == null)\n            {\n                return;\n            }\n\n            UpdateItemPosition(ctrl);\n\n            // 子要素全体のAutoFillを計算しなおす\n            var grid = ctrl.Parent as Grid;\n            if (grid == null)\n            {\n                return;\n            }\n\n            var isAutoFill = GetAutoFillChildren(grid);\n            if (isAutoFill)\n            {\n                AutoFill(grid);\n            }\n        }\n\n\n        private static void UpdateItemPosition(FrameworkElement element)\n        {\n            // AreaName ⇒ Areaの優先順位で、グリッド位置の設定を行う\n            var area = GetAreaNameRegion(element) ?? GetAreaRegion(element);\n            if (area != null)\n            {\n                Grid.SetRow(element, area.Row);\n                Grid.SetColumn(element, area.Column);\n                Grid.SetRowSpan(element, area.RowSpan);\n                Grid.SetColumnSpan(element, area.ColumnSpan);\n            }\n        }\n\n\n        private static AreaDefinition GetAreaNameRegion(FrameworkElement element)\n        {\n            var name = GetAreaName(element);\n            var grid = element.Parent as Grid;\n            if (grid == null || name == null) { return null; }\n            var areaList = GetAreaDefinitions(grid);\n            if (areaList == null) { return null; }\n\n            var area = areaList.FirstOrDefault(o => o.Name == name);\n            if (area == null) { return null; }\n\n            return new AreaDefinition(area.Row, area.Column, area.RowSpan, area.ColumnSpan);\n        }\n\n        private static AreaDefinition GetAreaRegion(FrameworkElement element)\n        {\n            var param = GetArea(element);\n            if (param == null) { return null; }\n\n            var list = param.Split(',')\n                .Select(o => o.Trim())\n                .Select(o => int.Parse(o))\n                .ToList();\n\n            // Row, Column, RowSpan, ColumnSpan\n            if (list.Count() != 4) { return null; }\n\n            return new AreaDefinition(list[0], list[1], list[2], list[3]);\n        }\n    }\n}\n"
  },
  {
    "path": "GridExtra.Shared/GridExtra.Shared.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\n    <HasSharedItems>true</HasSharedItems>\n    <SharedGUID>4914d867-f667-4151-a039-3fde665f3106</SharedGUID>\n  </PropertyGroup>\n  <PropertyGroup Label=\"Configuration\">\n    <Import_RootNamespace>SourceChord.GridExtra</Import_RootNamespace>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"$(MSBuildThisFileDirectory)BreakPoints.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)GridEx.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)ResponsiveGrid.cs\" />\n    <Compile Include=\"$(MSBuildThisFileDirectory)ResponsiveGrid.Properties.cs\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "GridExtra.Shared/GridExtra.Shared.shproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>4914d867-f667-4151-a039-3fde665f3106</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"GridExtra.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "GridExtra.Shared/ResponsiveGrid.Properties.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\n#if WINDOWS_WPF\nusing System.Windows;\nusing System.Windows.Controls;\n#elif WINDOWS_UWP\nusing Windows.Foundation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n#else\n#endif\n\n\nnamespace SourceChord.GridExtra\n{\n    public partial class ResponsiveGrid\n    {\n        #region ResponsiveGrid自体に設定する依存関係プロパティ\n        // 各種ブレークポイントの設定用プロパティ\n        public int MaxDivision\n        {\n            get { return (int)GetValue(MaxDivisionProperty); }\n            set { SetValue(MaxDivisionProperty, value); }\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for MaxDivision.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MaxDivisionProperty =\n            DependencyProperty.Register(\"MaxDivision\",\n                                        typeof(int),\n                                        typeof(ResponsiveGrid),\n                                        new FrameworkPropertyMetadata(12, FrameworkPropertyMetadataOptions.AffectsMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for MaxDivision.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MaxDivisionProperty =\n            DependencyProperty.Register(\"MaxDivision\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(12, OnDependencyPropertyChanged));\n\n        private static void OnDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var element = d as FrameworkElement;\n            var parent = element?.Parent as ResponsiveGrid;\n            parent?.InvalidateMeasure();\n        }\n#else\n#endif\n\n        public BreakPoints BreakPoints\n        {\n            get { return (BreakPoints)GetValue(BreakPointsProperty); }\n            set { SetValue(BreakPointsProperty, value); }\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for BreakPoints.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty BreakPointsProperty =\n            DependencyProperty.Register(\"BreakPoints\",\n                                        typeof(BreakPoints),\n                                        typeof(ResponsiveGrid),\n                                        new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for BreakPoints.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty BreakPointsProperty =\n            DependencyProperty.Register(\"BreakPoints\", typeof(BreakPoints), typeof(ResponsiveGrid), new PropertyMetadata(null, OnDependencyPropertyChanged));\n#else\n#endif\n\n#if WINDOWS_WPF\n        public bool ShowGridLines\n        {\n            get { return (bool)GetValue(ShowGridLinesProperty); }\n            set { SetValue(ShowGridLinesProperty, value); }\n        }\n        // Using a DependencyProperty as the backing store for ShowGridLines.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty ShowGridLinesProperty =\n            DependencyProperty.Register(\"ShowGridLines\", typeof(bool), typeof(ResponsiveGrid), new PropertyMetadata(false));\n#endif\n\n\n        #endregion\n\n\n\n        #region 各子要素のサイズを決めるための添付プロパティ\n        public static int GetXS(DependencyObject obj)\n        {\n            return (int)obj.GetValue(XSProperty);\n        }\n        public static void SetXS(DependencyObject obj, int value)\n        {\n            obj.SetValue(XSProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for XS.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XSProperty =\n            DependencyProperty.RegisterAttached(\"XS\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for XS.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XSProperty =\n            DependencyProperty.RegisterAttached(\"XS\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n\n        private static void OnAttachedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var element = d as FrameworkElement;\n            var parent = element?.Parent as ResponsiveGrid;\n            parent?.InvalidateMeasure();\n        }\n#else\n#endif\n\n        public static int GetSM(DependencyObject obj)\n        {\n            return (int)obj.GetValue(SMProperty);\n        }\n        public static void SetSM(DependencyObject obj, int value)\n        {\n            obj.SetValue(SMProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for SM.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SMProperty =\n            DependencyProperty.RegisterAttached(\"SM\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for SM.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SMProperty =\n            DependencyProperty.RegisterAttached(\"SM\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetMD(DependencyObject obj)\n        {\n            return (int)obj.GetValue(MDProperty);\n        }\n        public static void SetMD(DependencyObject obj, int value)\n        {\n            obj.SetValue(MDProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for MD.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MDProperty =\n            DependencyProperty.RegisterAttached(\"MD\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for MD.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MDProperty =\n            DependencyProperty.RegisterAttached(\"MD\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetLG(DependencyObject obj)\n        {\n            return (int)obj.GetValue(LGProperty);\n        }\n        public static void SetLG(DependencyObject obj, int value)\n        {\n            obj.SetValue(LGProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for LG.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LGProperty =\n            DependencyProperty.RegisterAttached(\"LG\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for LG.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LGProperty =\n            DependencyProperty.RegisterAttached(\"LG\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        #endregion\n\n        #region Offsetプロパティ\n        public static int GetXS_Offset(DependencyObject obj)\n        {\n            return (int)obj.GetValue(XS_OffsetProperty);\n        }\n        public static void SetXS_Offset(DependencyObject obj, int value)\n        {\n            obj.SetValue(XS_OffsetProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for XS_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"XS_Offset\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for XS_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"XS_Offset\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetSM_Offset(DependencyObject obj)\n        {\n            return (int)obj.GetValue(SM_OffsetProperty);\n        }\n        public static void SetSM_Offset(DependencyObject obj, int value)\n        {\n            obj.SetValue(SM_OffsetProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for SM_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"SM_Offset\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for SM_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"SM_Offset\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetMD_Offset(DependencyObject obj)\n        {\n            return (int)obj.GetValue(MD_OffsetProperty);\n        }\n        public static void SetMD_Offset(DependencyObject obj, int value)\n        {\n            obj.SetValue(MD_OffsetProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for MD_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"MD_Offset\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for MD_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"MD_Offset\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetLG_Offset(DependencyObject obj)\n        {\n            return (int)obj.GetValue(LG_OffsetProperty);\n        }\n        public static void SetLG_Offset(DependencyObject obj, int value)\n        {\n            obj.SetValue(LG_OffsetProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for LG_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LG_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"LG_Offset\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for LG_Offset.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LG_OffsetProperty =\n            DependencyProperty.RegisterAttached(\"LG_Offset\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        #endregion\n\n\n        #region Pushプロパティ\n        public static int GetXS_Push(DependencyObject obj)\n        {\n            return (int)obj.GetValue(XS_PushProperty);\n        }\n        public static void SetXS_Push(DependencyObject obj, int value)\n        {\n            obj.SetValue(XS_PushProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for XS_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_PushProperty =\n            DependencyProperty.RegisterAttached(\"XS_Push\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for XS_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_PushProperty =\n            DependencyProperty.RegisterAttached(\"XS_Push\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetSM_Push(DependencyObject obj)\n        {\n            return (int)obj.GetValue(SM_PushProperty);\n        }\n        public static void SetSM_Push(DependencyObject obj, int value)\n        {\n            obj.SetValue(SM_PushProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for SM_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_PushProperty =\n            DependencyProperty.RegisterAttached(\"SM_Push\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for SM_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_PushProperty =\n            DependencyProperty.RegisterAttached(\"SM_Push\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetMD_Push(DependencyObject obj)\n        {\n            return (int)obj.GetValue(MD_PushProperty);\n        }\n        public static void SetMD_Push(DependencyObject obj, int value)\n        {\n            obj.SetValue(MD_PushProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for MD_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_PushProperty =\n            DependencyProperty.RegisterAttached(\"MD_Push\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for MD_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_PushProperty =\n            DependencyProperty.RegisterAttached(\"MD_Push\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetLG_Push(DependencyObject obj)\n        {\n            return (int)obj.GetValue(LG_PushProperty);\n        }\n        public static void SetLG_Push(DependencyObject obj, int value)\n        {\n            obj.SetValue(LG_PushProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for LG_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LG_PushProperty =\n            DependencyProperty.RegisterAttached(\"LG_Push\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for LG_Push.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LG_PushProperty =\n            DependencyProperty.RegisterAttached(\"LG_Push\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        #endregion\n\n\n        #region Pullプロパティ\n        public static int GetXS_Pull(DependencyObject obj)\n        {\n            return (int)obj.GetValue(XS_PullProperty);\n        }\n        public static void SetXS_Pull(DependencyObject obj, int value)\n        {\n            obj.SetValue(XS_PullProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for XS_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_PullProperty =\n            DependencyProperty.RegisterAttached(\"XS_Pull\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for XS_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty XS_PullProperty =\n            DependencyProperty.RegisterAttached(\"XS_Pull\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetSM_Pull(DependencyObject obj)\n        {\n            return (int)obj.GetValue(SM_PullProperty);\n        }\n        public static void SetSM_Pull(DependencyObject obj, int value)\n        {\n            obj.SetValue(SM_PullProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for SM_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_PullProperty =\n            DependencyProperty.RegisterAttached(\"SM_Pull\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for SM_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty SM_PullProperty =\n            DependencyProperty.RegisterAttached(\"SM_Pull\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetMD_Pull(DependencyObject obj)\n        {\n            return (int)obj.GetValue(MD_PullProperty);\n        }\n        public static void SetMD_Pull(DependencyObject obj, int value)\n        {\n            obj.SetValue(MD_PullProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for MD_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_PullProperty =\n            DependencyProperty.RegisterAttached(\"MD_Pull\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for MD_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty MD_PullProperty =\n            DependencyProperty.RegisterAttached(\"MD_Pull\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        public static int GetLG_Pull(DependencyObject obj)\n        {\n            return (int)obj.GetValue(LG_PullProperty);\n        }\n        public static void SetLG_Pull(DependencyObject obj, int value)\n        {\n            obj.SetValue(LG_PullProperty, value);\n        }\n#if WINDOWS_WPF\n        // Using a DependencyProperty as the backing store for LG_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LG_PullProperty =\n            DependencyProperty.RegisterAttached(\"LG_Pull\",\n                                                typeof(int),\n                                                typeof(ResponsiveGrid),\n                                                new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsParentMeasure));\n#elif WINDOWS_UWP\n        // Using a DependencyProperty as the backing store for LG_Pull.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LG_PullProperty =\n            DependencyProperty.RegisterAttached(\"LG_Pull\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0, OnAttachedPropertyChanged));\n#else\n#endif\n\n        #endregion\n\n\n        #region 読み取り専用の添付プロパティ\n        public static int GetActualColumn(DependencyObject obj)\n        {\n            return (int)obj.GetValue(ActualColumnProperty);\n        }\n        protected static void SetActualColumn(DependencyObject obj, int value)\n        {\n            obj.SetValue(ActualColumnProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for ActualColumn.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty ActualColumnProperty =\n            DependencyProperty.RegisterAttached(\"ActualColumn\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0));\n\n        public static int GetActualRow(DependencyObject obj)\n        {\n            return (int)obj.GetValue(ActualRowProperty);\n        }\n        protected static void SetActualRow(DependencyObject obj, int value)\n        {\n            obj.SetValue(ActualRowProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for ActualRow.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty ActualRowProperty =\n            DependencyProperty.RegisterAttached(\"ActualRow\", typeof(int), typeof(ResponsiveGrid), new PropertyMetadata(0));\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "GridExtra.Shared/ResponsiveGrid.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\n#if WINDOWS_WPF\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n#elif WINDOWS_UWP\nusing Windows.Foundation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n#else\n#endif\n\n\nnamespace SourceChord.GridExtra\n{\n    public partial class ResponsiveGrid : Panel\n    {\n        public ResponsiveGrid()\n        {\n            this.MaxDivision = 12;\n            this.BreakPoints = new BreakPoints();\n        }\n\n        protected override Size MeasureOverride(Size availableSize)\n        {\n            var count = 0;\n            var currentRow = 0;\n\n            var availableWidth = double.IsPositiveInfinity(availableSize.Width) ? double.PositiveInfinity : availableSize.Width / this.MaxDivision;\n            var children = this.Children.OfType<UIElement>();\n\n\n            foreach (UIElement child in this.Children)\n            {\n                if (child != null)\n                {\n                    // Collapsedの時はレイアウトしない\n                    if (child.Visibility == Visibility.Collapsed) { continue; }\n\n                    var span = this.GetSpan(child, availableSize.Width);\n                    var offset = this.GetOffset(child, availableSize.Width);\n                    var push = this.GetPush(child, availableSize.Width);\n                    var pull = this.GetPull(child, availableSize.Width);\n\n                    if (count + span + offset > this.MaxDivision)\n                    {\n                        // リセット\n                        currentRow++;\n                        count = 0;\n                    }\n\n                    SetActualColumn(child, count + offset + push - pull);\n                    SetActualRow(child, currentRow);\n\n                    count += (span + offset);\n\n                    var size = new Size(availableWidth * span, double.PositiveInfinity);\n                    child.Measure(size);\n                }\n            }\n\n            // 行ごとにグルーピングする\n            var group = this.Children.OfType<UIElement>()\n                                     .GroupBy(x => GetActualRow(x));\n\n            var totalSize = new Size();\n            if (group.Count() != 0)\n            {\n                totalSize.Width = group.Max(rows => rows.Sum(o => o.DesiredSize.Width));\n                totalSize.Height = group.Sum(rows => rows.Max(o => o.DesiredSize.Height));\n            }\n\n            return totalSize;\n        }\n\n        protected int GetSpan(UIElement element, double width)\n        {\n            var span = 0;\n\n            var getXS = new Func<UIElement, int>((o) => { var x = GetXS(o); return x != 0 ? x : this.MaxDivision; });\n            var getSM = new Func<UIElement, int>((o) => { var x = GetSM(o); return x != 0 ? x : getXS(o); });\n            var getMD = new Func<UIElement, int>((o) => { var x = GetMD(o); return x != 0 ? x : getSM(o); });\n            var getLG = new Func<UIElement, int>((o) => { var x = GetLG(o); return x != 0 ? x : getMD(o); });\n\n            if (width < this.BreakPoints.XS_SM)\n            {\n                span = getXS(element);\n            }\n            else if (width < this.BreakPoints.SM_MD)\n            {\n                span = getSM(element);\n            }\n            else if (width < this.BreakPoints.MD_LG)\n            {\n                span = getMD(element);\n            }\n            else\n            {\n                span = getLG(element);\n            }\n\n            return Math.Min(Math.Max(0, span), this.MaxDivision); ;\n        }\n\n        protected int GetOffset(UIElement element, double width)\n        {\n            var span = 0;\n\n            var getXS = new Func<UIElement, int>((o) => { var x = GetXS_Offset(o); return x != 0 ? x : 0; });\n            var getSM = new Func<UIElement, int>((o) => { var x = GetSM_Offset(o); return x != 0 ? x : getXS(o); });\n            var getMD = new Func<UIElement, int>((o) => { var x = GetMD_Offset(o); return x != 0 ? x : getSM(o); });\n            var getLG = new Func<UIElement, int>((o) => { var x = GetLG_Offset(o); return x != 0 ? x : getMD(o); });\n\n            if (width < this.BreakPoints.XS_SM)\n            {\n                span = getXS(element);\n            }\n            else if (width < this.BreakPoints.SM_MD)\n            {\n                span = getSM(element);\n            }\n            else if (width < this.BreakPoints.MD_LG)\n            {\n                span = getMD(element);\n            }\n            else\n            {\n                span = getLG(element);\n            }\n\n            return Math.Min(Math.Max(0, span), this.MaxDivision); ;\n        }\n\n        protected int GetPush(UIElement element, double width)\n        {\n            var span = 0;\n\n            var getXS = new Func<UIElement, int>((o) => { var x = GetXS_Push(o); return x != 0 ? x : 0; });\n            var getSM = new Func<UIElement, int>((o) => { var x = GetSM_Push(o); return x != 0 ? x : getXS(o); });\n            var getMD = new Func<UIElement, int>((o) => { var x = GetMD_Push(o); return x != 0 ? x : getSM(o); });\n            var getLG = new Func<UIElement, int>((o) => { var x = GetLG_Push(o); return x != 0 ? x : getMD(o); });\n\n            if (width < this.BreakPoints.XS_SM)\n            {\n                span = getXS(element);\n            }\n            else if (width < this.BreakPoints.SM_MD)\n            {\n                span = getSM(element);\n            }\n            else if (width < this.BreakPoints.MD_LG)\n            {\n                span = getMD(element);\n            }\n            else\n            {\n                span = getLG(element);\n            }\n\n            return Math.Min(Math.Max(0, span), this.MaxDivision); ;\n        }\n\n        protected int GetPull(UIElement element, double width)\n        {\n            var span = 0;\n\n            var getXS = new Func<UIElement, int>((o) => { var x = GetXS_Pull(o); return x != 0 ? x : 0; });\n            var getSM = new Func<UIElement, int>((o) => { var x = GetSM_Pull(o); return x != 0 ? x : getXS(o); });\n            var getMD = new Func<UIElement, int>((o) => { var x = GetMD_Pull(o); return x != 0 ? x : getSM(o); });\n            var getLG = new Func<UIElement, int>((o) => { var x = GetLG_Pull(o); return x != 0 ? x : getMD(o); });\n\n            if (width < this.BreakPoints.XS_SM)\n            {\n                span = getXS(element);\n            }\n            else if (width < this.BreakPoints.SM_MD)\n            {\n                span = getSM(element);\n            }\n            else if (width < this.BreakPoints.MD_LG)\n            {\n                span = getMD(element);\n            }\n            else\n            {\n                span = getLG(element);\n            }\n\n            return Math.Min(Math.Max(0, span), this.MaxDivision); ;\n        }\n\n        protected override Size ArrangeOverride(Size finalSize)\n        {\n            var columnWidth = finalSize.Width / this.MaxDivision;\n\n            // 行ごとにグルーピングする\n            var group = this.Children.OfType<UIElement>()\n                                     .GroupBy(x => GetActualRow(x));\n\n            double temp = 0;\n            foreach (var rows in group)\n            {\n                double max = 0;\n\n                var columnHeight = rows.Max(o => o.DesiredSize.Height);\n                foreach (var element in rows)\n                {\n                    var column = GetActualColumn(element);\n                    var row = GetActualRow(element);\n                    var columnSpan = this.GetSpan(element, finalSize.Width);\n\n                    var rect = new Rect(columnWidth * column, temp, columnWidth * columnSpan, columnHeight);\n\n                    element.Arrange(rect);\n\n                    max = Math.Max(element.DesiredSize.Height, max);\n                }\n\n                temp += max;\n            }\n            return base.ArrangeOverride(finalSize);\n        }\n\n#if WINDOWS_WPF\n        // ShowGridLinesで表示する際に利用するペンの定義\n        private static readonly Pen _guidePen1\n            = new Pen(Brushes.Yellow, 1);\n        private static readonly Pen _guidePen2\n            = new Pen(Brushes.Blue, 1) { DashStyle = new DashStyle(new double[] { 4, 4 }, 0) };\n\n        protected override void OnRender(DrawingContext dc)\n        {\n            base.OnRender(dc);\n            // ShowGridLinesが有効な場合、各種エレメントを描画する前に、ガイド用のグリッドを描画する。\n            if (this.ShowGridLines)\n            {\n                var gridNum = this.MaxDivision;\n                var unit = this.ActualWidth / gridNum;\n                for (var i = 0; i <= gridNum; i++)\n                {\n                    var x = (int)(unit * i);\n                    dc.DrawLine(_guidePen1, new Point(x, 0), new Point(x, this.ActualHeight));\n                    dc.DrawLine(_guidePen2, new Point(x, 0), new Point(x, this.ActualHeight));\n                }\n            }\n        }\n#endif\n\n    }\n}\n"
  },
  {
    "path": "GridExtra.Uwp/GridExtra.Uwp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SourceChord.GridExtra</RootNamespace>\n    <AssemblyName>GridExtra.Uwp</AssemblyName>\n    <DefaultLanguage>ja-JP</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.10586.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>..\\Build\\Uwp\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>..\\Build\\Uwp\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <None Include=\"project.json\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <EmbeddedResource Include=\"Properties\\GridExtra.Uwp.rd.xml\" />\n  </ItemGroup>\n  <Import Project=\"..\\GridExtra.Shared\\GridExtra.Shared.projitems\" Label=\"Shared\" />\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "GridExtra.Uwp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"GridExtra.Uwp\")]\n[assembly: AssemblyDescription(\"GridExtra is a custom panel library for WPF/UWP.\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"SourceChord\")]\n[assembly: AssemblyProduct(\"GridExtra.Uwp\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"0.4.0.0\")]\n[assembly: AssemblyFileVersion(\"0.4.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "GridExtra.Uwp/Properties/GridExtra.Uwp.rd.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n    This file contains Runtime Directives, specifications about types your application accesses\n    through reflection and other dynamic code patterns. Runtime Directives are used to control the\n    .NET Native optimizer and ensure that it does not remove code accessed by your library. If your\n    library does not do any reflection, then you generally do not need to edit this file. However,\n    if your library reflects over types, especially types passed to it or derived from its types,\n    then you should write Runtime Directives.\n\n    The most common use of reflection in libraries is to discover information about types passed\n    to the library. Runtime Directives have three ways to express requirements on types passed to\n    your library.\n\n    1.  Parameter, GenericParameter, TypeParameter, TypeEnumerableParameter\n        Use these directives to reflect over types passed as a parameter.\n\n    2.  SubTypes\n        Use a SubTypes directive to reflect over types derived from another type.\n\n    3.  AttributeImplies\n        Use an AttributeImplies directive to indicate that your library needs to reflect over\n        types or methods decorated with an attribute.\n\n    For more information on writing Runtime Directives for libraries, please visit\n    http://go.microsoft.com/fwlink/?LinkID=391919\n-->\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Library Name=\"GridExtra.Uwp\">\n\n  \t<!-- add directives for your library here -->\n\n  </Library>\n</Directives>\n"
  },
  {
    "path": "GridExtra.Uwp/project.json",
    "content": "﻿{\n  \"dependencies\": {\n    \"Microsoft.NETCore.UniversalWindowsPlatform\": \"5.1.0\"\n  },\n  \"frameworks\": {\n    \"uap10.0\": {}\n  },\n  \"runtimes\": {\n    \"win10-arm\": {},\n    \"win10-arm-aot\": {},\n    \"win10-x86\": {},\n    \"win10-x86-aot\": {},\n    \"win10-x64\": {},\n    \"win10-x64-aot\": {}\n  }\n}"
  },
  {
    "path": "GridExtra.Wpf/BreakPointsTypeConverter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace SourceChord.GridExtra\n{\n    public class BreakPointsTypeConverter : TypeConverter\n    {\n        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)\n        {\n            //return base.CanConvertFrom(context, sourceType);\n            return sourceType == typeof(string);\n        }\n\n        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)\n        {\n            var text = (string)value;\n            var list = text.Split(',')\n                           .Select(o => o.Trim())\n                           .Select(o => int.Parse(o))\n                           .ToList();\n\n            if (list.Count() != 3)\n            {\n                throw new ArgumentException($\"'{value}' Invalid value. BreakPoints must contains 3 items.\");\n            }\n\n            return new BreakPoints() { XS_SM = list[0], SM_MD = list[1], MD_LG = list[2] };\n        }\n    }\n}\n"
  },
  {
    "path": "GridExtra.Wpf/GridExtra.Wpf.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}</ProjectGuid>\n    <OutputType>library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>SourceChord.GridExtra</RootNamespace>\n    <AssemblyName>GridExtra.Wpf</AssemblyName>\n    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <TargetFrameworkProfile />\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>..\\Build\\Wpf\\Debug\\</OutputPath>\n    <DefineConstants>TRACE;DEBUG;WINDOWS_WPF</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>none</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>..\\Build\\Wpf\\Release\\</OutputPath>\n    <DefineConstants>TRACE;WINDOWS_WPF</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"BreakPointsTypeConverter.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n    <Compile Include=\"WrapPanelEx.cs\" />\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n  <Import Project=\"..\\GridExtra.Shared\\GridExtra.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "GridExtra.Wpf/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。\n// アセンブリに関連付けられている情報を変更するには、\n// これらの属性値を変更してください。\n[assembly: AssemblyTitle(\"GridExtra.Wpf\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"SourceChord\")]\n[assembly: AssemblyProduct(\"GridExtra.Wpf\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから\n// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、\n// その型の ComVisible 属性を true に設定してください。\n[assembly: ComVisible(false)]\n\n//ローカライズ可能なアプリケーションのビルドを開始するには、\n//.csproj ファイルの <UICulture>CultureYouAreCodingWith</UICulture> を\n//<PropertyGroup> 内部で設定します。たとえば、\n//ソース ファイルで英語を使用している場合、<UICulture> を en-US に設定します。次に、\n//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の \"en-US\" を\n//プロジェクト ファイルの UICulture 設定と一致するよう更新します。\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly:ThemeInfo(\n    ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所\n                             //(リソースがページ、\n                             //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます)\n    ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所\n                                      //(リソースがページ、\n                                      //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます)\n)]\n\n\n// アセンブリのバージョン情報は次の 4 つの値で構成されています:\n//\n//      メジャー バージョン\n//      マイナー バージョン\n//      ビルド番号\n//      Revision\n//\n// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を \n// 既定値にすることができます:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"0.4.0.0\")]\n[assembly: AssemblyFileVersion(\"0.4.0.0\")]\n"
  },
  {
    "path": "GridExtra.Wpf/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     このコードはツールによって生成されました。\n//     ランタイム バージョン:4.0.30319.42000\n//\n//     このファイルへの変更は、以下の状況下で不正な動作の原因になったり、\n//     コードが再生成されるときに損失したりします。\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SourceChord.GridExtra.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。\n    /// </summary>\n    // このクラスは StronglyTypedResourceBuilder クラスが ResGen\n    // または Visual Studio のようなツールを使用して自動生成されました。\n    // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に\n    // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   このクラスで使用されているキャッシュされた ResourceManager インスタンスを返します。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"SourceChord.GridExtra.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、\n        ///   現在のスレッドの CurrentUICulture プロパティをオーバーライドします。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "GridExtra.Wpf/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "GridExtra.Wpf/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     このコードはツールによって生成されました。\n//     ランタイム バージョン:4.0.30319.42000\n//\n//     このファイルへの変更は、以下の状況下で不正な動作の原因になったり、\n//     コードが再生成されるときに損失したりします。\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace SourceChord.GridExtra.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"14.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "GridExtra.Wpf/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  },
  {
    "path": "GridExtra.Wpf/WrapPanelEx.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace SourceChord.GridExtra\n{\n    public static class WrapPanelEx\n    {\n\n        public static Size GetOriginalSize(DependencyObject obj)\n        {\n            return (Size)obj.GetValue(OriginalSizeProperty);\n        }\n\n        private static void SetOriginalSize(DependencyObject obj, Size value)\n        {\n            obj.SetValue(OriginalSizeProperty, value);\n        }\n\n        // Using a DependencyProperty as the backing store for OriginalSize.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty OriginalSizeProperty =\n            DependencyProperty.RegisterAttached(\"OriginalSize\", typeof(Size), typeof(WrapPanelEx), new PropertyMetadata(Size.Empty));\n\n\n        public static bool GetAdaptiveLayout(DependencyObject obj)\n        {\n            return (bool)obj.GetValue(AdaptiveLayoutProperty);\n        }\n\n        public static void SetAdaptiveLayout(DependencyObject obj, bool value)\n        {\n            obj.SetValue(AdaptiveLayoutProperty, value);\n        }\n\n        // Using a DependencyProperty as the backing store for AdaptiveLayout.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty AdaptiveLayoutProperty =\n            DependencyProperty.RegisterAttached(\"AdaptiveLayout\", typeof(bool), typeof(WrapPanelEx), new PropertyMetadata(false, OnAdaptiveLayoutChanged));\n\n        private static void OnAdaptiveLayoutChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var panel = d as WrapPanel;\n            var isEnabled = (bool)e.NewValue;\n            if (panel == null) { return; }\n\n            if (isEnabled)\n            {\n                SetOriginalSize(panel, new Size(panel.ItemWidth, panel.ItemHeight));\n                var layoutUpdateCallback = CreateLayoutUpdateHandler(panel);\n                panel.LayoutUpdated += layoutUpdateCallback;\n                SetLayoutUpdatedCallback(panel, layoutUpdateCallback);\n            }\n            else\n            {\n                var originalSize = GetOriginalSize(panel);\n\n                panel.ItemWidth = originalSize.Width;\n                panel.ItemHeight = originalSize.Height;\n\n                panel.ClearValue(OriginalSizeProperty);\n                // イベントの解除\n                var callback = GetLayoutUpdatedCallback(panel);\n                panel.LayoutUpdated -= callback;\n            }\n        }\n\n        private static EventHandler CreateLayoutUpdateHandler(WrapPanel panel)\n        {\n            var layoutUpdateCallback = new EventHandler((sender, args) =>\n            {\n                if (panel == null) return;\n                var orientaion = panel.Orientation;\n                var originalSize = GetOriginalSize(panel);\n\n                if (orientaion == Orientation.Horizontal)\n                {\n                    if (double.IsNaN(originalSize.Width)) return;\n\n                    var count = Math.Floor(panel.ActualWidth / originalSize.Width);\n                    var size = panel.ActualWidth / count;\n\n                    panel.ItemWidth = size;\n                }\n                else\n                {\n                    if (double.IsNaN(originalSize.Width)) return;\n\n                    var count = Math.Floor(panel.ActualHeight / originalSize.Height);\n                    var size = panel.ActualHeight / count;\n\n                    panel.ItemHeight = size;\n                }\n            });\n\n            return layoutUpdateCallback;\n        }\n\n        public static EventHandler GetLayoutUpdatedCallback(DependencyObject obj)\n        {\n            return (EventHandler)obj.GetValue(LayoutUpdatedCallbackProperty);\n        }\n        private static void SetLayoutUpdatedCallback(DependencyObject obj, EventHandler value)\n        {\n            obj.SetValue(LayoutUpdatedCallbackProperty, value);\n        }\n        // Using a DependencyProperty as the backing store for LayoutUpdatedCallback.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty LayoutUpdatedCallbackProperty =\n            DependencyProperty.RegisterAttached(\"LayoutUpdatedCallback\", typeof(EventHandler), typeof(WrapPanelEx), new PropertyMetadata(null));\n\n    }\n}\n"
  },
  {
    "path": "GridExtra.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25420.1\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"GridExtra.Wpf\", \"GridExtra.Wpf\\GridExtra.Wpf.csproj\", \"{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"GridExtra.Uwp\", \"GridExtra.Uwp\\GridExtra.Uwp.csproj\", \"{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}\"\nEndProject\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"GridExtra.Shared\", \"GridExtra.Shared\\GridExtra.Shared.shproj\", \"{4914D867-F667-4151-A039-3FDE665F3106}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Sample\", \"Sample\", \"{611249A1-CDE6-4AAD-B532-73007C552C77}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BasicSample.Wpf\", \"Sample\\BasicSample.Wpf\\BasicSample.Wpf.csproj\", \"{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BasicSample.Uwp\", \"Sample\\BasicSample.Uwp\\BasicSample.Uwp.csproj\", \"{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Nuget\", \"Nuget\", \"{E1C85495-293B-4198-845C-6D7068A1961E}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tNuget\\GridExtra.nuspec = Nuget\\GridExtra.nuspec\n\t\tNuget\\pack.bat = Nuget\\pack.bat\n\tEndProjectSection\nEndProject\nGlobal\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\n\t\tGridExtra.Shared\\GridExtra.Shared.projitems*{4914d867-f667-4151-a039-3fde665f3106}*SharedItemsImports = 13\n\t\tGridExtra.Shared\\GridExtra.Shared.projitems*{631c583b-5e88-4abd-9926-c18e4addf6c6}*SharedItemsImports = 4\n\t\tGridExtra.Shared\\GridExtra.Shared.projitems*{fe7a5887-17bc-48e9-b601-815a2fdbf2a0}*SharedItemsImports = 4\n\tEndGlobalSection\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|ARM = Debug|ARM\n\t\tDebug|x64 = Debug|x64\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|ARM = Release|ARM\n\t\tRelease|x64 = Release|x64\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|x64.Build.0 = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{631C583B-5E88-4ABD-9926-C18E4ADDF6C6}.Release|x86.Build.0 = Release|Any CPU\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|x64.Build.0 = Debug|x64\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Debug|x86.Build.0 = Debug|x86\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|ARM.Build.0 = Release|ARM\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|x64.ActiveCfg = Release|x64\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|x64.Build.0 = Release|x64\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|x86.ActiveCfg = Release|x86\n\t\t{FE7A5887-17BC-48E9-B601-815A2FDBF2A0}.Release|x86.Build.0 = Release|x86\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|ARM.ActiveCfg = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|ARM.Build.0 = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|x64.ActiveCfg = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|x64.Build.0 = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Debug|x86.Build.0 = Debug|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|ARM.ActiveCfg = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|ARM.Build.0 = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|x64.ActiveCfg = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|x64.Build.0 = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}.Release|x86.Build.0 = Release|Any CPU\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|ARM.ActiveCfg = Debug|ARM\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|ARM.Build.0 = Debug|ARM\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|ARM.Deploy.0 = Debug|ARM\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|x64.Build.0 = Debug|x64\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|x64.Deploy.0 = Debug|x64\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|x86.Build.0 = Debug|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Debug|x86.Deploy.0 = Debug|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|ARM.ActiveCfg = Release|ARM\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|ARM.Build.0 = Release|ARM\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|ARM.Deploy.0 = Release|ARM\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|x64.ActiveCfg = Release|x64\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|x64.Build.0 = Release|x64\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|x64.Deploy.0 = Release|x64\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|x86.ActiveCfg = Release|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|x86.Build.0 = Release|x86\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}.Release|x86.Deploy.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B} = {611249A1-CDE6-4AAD-B532-73007C552C77}\n\t\t{416D9AA6-F3E7-4338-B9A3-E060060DAF0C} = {611249A1-CDE6-4AAD-B532-73007C552C77}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 minami_SC\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Nuget/GridExtra.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd\">\n    <metadata>\n        <id>GridExtra</id>\n        <version>0.4.0</version>\n        <title>GridExtra</title>\n        <authors>SourceChord</authors>\n        <owners>SourceChord</owners>\n        <licenseUrl>https://github.com/sourcechord/GridExtra/blob/master/LICENSE</licenseUrl>\n        <projectUrl>https://github.com/sourcechord/GridExtra</projectUrl>\n        <requireLicenseAcceptance>false</requireLicenseAcceptance>\n        <description>GridExtra is a custom panel library for WPF/UWP.</description>\n        <copyright>Copyright 2016</copyright>\n        <tags>XAML WPF UWP Panel Library</tags>\n    </metadata>\n    <files>\n        <file src=\"..\\Build\\Wpf\\Release\\GridExtra.Wpf.dll\" target=\"lib\\net45\\GridExtra.Wpf.dll\" />\n        <file src=\"..\\Build\\Uwp\\Release\\GridExtra.Uwp.dll\" target=\"lib\\uap10.0\\GridExtra.Uwp.dll\" />\n    </files>\n</package>"
  },
  {
    "path": "Nuget/pack.bat",
    "content": "nuget pack GridExtra.nuspec\npause\n"
  },
  {
    "path": "README.md",
    "content": "# GridExtra\nGridExtra is a custom panel library for WPF/UWP.\n\n\n* ResponsiveGrid\n    * Custom Panel class that provides bootstrap like grid system.\n    * Grid system\n        * switch layout with window width.\n            * XS(<768px), SM(<992px), MD(<1200px), LG(1200px<=)\n        * 12 columns across the page.(customizable with MaxDivision property)\n* GridEx\n    * Helper class that defines usefull attached properties for Grid panel.\n* WrapPanelEx\n    * Helper class that provide adaptive layout for WrapPanel.\n\n## install\n*Nuget Package*  \n```\nInstall-Package GridExtra\n```\nhttps://www.nuget.org/packages/GridExtra/\n\n### Preparation\nAdd xmlns to xaml code.\n\n#### For WPF\n```xml\nxmlns:ge=\"clr-namespace:SourceChord.GridExtra;assembly=GridExtra.Wpf\"\n```\n\n#### For UWP\n```xml\nxmlns:ge=\"using:SourceChord.GridExtra\"\n```\n\n\n## Usage\n### ResponsiveGrid\nResponsiveGrid provides the grid layout system that is similar to Bootstrap framework.\n\n![demo](./docs/ResponsiveGrid/demo.gif)\n\n#### Example\n```xml\n    <Grid>\n        <Grid.Resources>\n            <Style TargetType=\"{x:Type Border}\">\n                <Setter Property=\"BorderBrush\" Value=\"Black\" />\n                <Setter Property=\"BorderThickness\" Value=\"1\" />\n                <Setter Property=\"Background\" Value=\"LightGray\" />\n                <Setter Property=\"Height\" Value=\"60\" />\n            </Style>\n        </Grid.Resources>\n        <rg:ResponsiveGrid>\n            <Border ge:ResponsiveGrid.XS=\"12\" ge:ResponsiveGrid.SM=\"3\" />\n            <Border ge:ResponsiveGrid.XS=\"12\" ge:ResponsiveGrid.SM=\"6\" />\n            <Border ge:ResponsiveGrid.XS=\"12\" ge:ResponsiveGrid.SM=\"3\" />\n        </rg:ResponsiveGrid>\n    </Grid>\n```\n*extra small device(~768px)*  \n![extra small device](./docs/ResponsiveGrid/capture1.png)\n\n*small device(~992px)*  \n![small device](./docs/ResponsiveGrid/capture2.png)\n\n#### Properties\n\n##### Dependency Properties\n|Property Name|Type|Description|\n|-----|-----|-----|\n|MaxDivision|int|Gets or sets a value that determines grid divisions.|\n|BreakPoints|BreakPoints class||\n|ShowGridLines|int|Gets or sets a value that indicates whether grid column's lines are visible within this ResponsiveGrid. |\n\n\n##### Attached Properties\n\n|Property Name|Type|Description|\n|-----|-----|-----|\n|XS<br/>SM<br/>MD<br/>LG<br/>|int|Gets or sets a value that determines grid columns for XS(extra small), SM(small), MD(medium), LG(large) devices.|\n|XS_Offset<br/>SM_Offset<br/>MD_Offset<br/>LG_Offset<br/>|int|Gets or sets a value that determines grid columns offset for XS(extra small), SM(small), MD(medium), LG(large) devices.|\n|XS_Push<br/>SM_Push<br/>MD_Push<br/>LG_Push<br/>|int|Gets or sets a value that moves columns to right from the original position.|\n|XS_Pull<br/>SM_Pull<br/>MD_Pull<br/>LG_Pull<br/>|int|Gets or sets a value that moves columns to left from the original position.|\n\n\n##### Compared to bootstrap\n\n|bootstrap|ResponsiveGrid|\n|-----|-----|\n|col-xs<br/>col-sm<br/>col-md<br/>col-lg<br/>|XS<br/>SM<br/>MD<br/>LG<br/>|\n|col-xs-offset<br/>col-sm-offset<br/>col-md-offset<br/>col-lg-offset<br/>|XS_Offset<br/>SM_Offset<br/>MD_Offset<br/>LG_Offset<br/>|\n|col-xs-push<br/>col-sm-push<br/>col-md-push<br/>col-lg-push<br/>|XS_Push<br/>SM_Push<br/>MD_Push<br/>LG_Push<br/>|\n|col-xs-pull<br/>col-sm-pull<br/>col-md-pull<br/>col-lg-pull<br/>|XS_Pull<br/>SM_Pull<br/>MD_Pull<br/>LG_Pull<br/>|\n|visibility-xs, visibility-sm,…<br />hidden-xs, hidden-sm,...|(T.B.D.)|\n\n\n\n#### attention\nResponsiveGrid is not suitable for ItemsPanel, because it isn't implemented VirtualizingPanel class.\n\nIf you use ResponsiveGrid in ListBox as ItemsPanel.\nYour ListBox become to not virtualize items of ListBox.\n\n\n\n### GridEx\nGridEx is Helper class for defining Grid properties.\n\n![demo](./docs/GridEx/demo.gif)\n\n#### Example1 (Row/Column Definition)\n```xml\n    <Grid ge:GridEx.RowDefinition=\"*, *, *, *\"\n          ge:GridEx.ColumnDefinition=\"50, 75, *, 2*\"\n          ShowGridLines=\"True\">\n        <Button Grid.Row=\"1\"\n                Grid.Column=\"2\"\n                Margin=\"5\"\n                Content=\"Button\" />\n    </Grid>\n```\n\n![Example1](./docs/GridEx/example1.png)\n\n\n##### Row/Column Definition with Min/Max size\n\n```xml\n    <Grid ge:GridEx.RowDefinition=\"*, *, *, *\"\n          ge:GridEx.ColumnDefinition=\"50, *(50-200), 2*(80-), 2*(-300)\"\n          ShowGridLines=\"True\">\n        <Button Grid.Row=\"1\"\n                Grid.Column=\"2\"\n                Margin=\"5\"\n                Content=\"Button\" />\n    </Grid>\n```\n`ge:GridEx.ColumnDefinition=\"50, *(50-200), 2*(80-), 2*(-300)\"` is similar to below definition.\n\n```xml\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"50\"/>\n            <ColumnDefinition Width=\"*\" MinWidth=\"50\" MaxWidth=\"200\"/>\n            <ColumnDefinition Width=\"2*\" MinWidth=\"80\"/>\n            <ColumnDefinition Width=\"2*\" MaxWidth=\"300\"/>\n        </Grid.ColumnDefinitions>\n```\n\n#### Example2 (Area Definition)\n`Area` property provides the way of defineing Row/Column/RowSpan/ColumnSpan.\n\n```xml\n    <Grid ge:GridEx.RowDefinition=\"*, *, *, *\"\n          ge:GridEx.ColumnDefinition=\"*, *, *, *\"\n          ShowGridLines=\"True\">\n        <Button Margin=\"5\"\n                ge:GridEx.Area=\"0, 0, 1, 2\"\n                Content=\"GridEx.Area=&quot;0, 0, 1, 2&quot;\" />\n        <Button Margin=\"5\"\n                ge:GridEx.Area=\"2, 1, 2, 3\"\n                Content=\"GridEx.Area=&quot;2, 1, 2, 3&quot;\" />\n    </Grid>\n```\n\n![Example2](./docs/GridEx/example2.png)\n\n\n#### Example3 (Named Template Area)\n\n`TemplateArea` provides named grid areas, like CSS Grid Layout Module Level 1.  \n`TemplateArea` property makes row/column definition. And, define region's name.\n\nChildren of Grid can be placed with region's name, that is defined by `TemplateArea` property.\n\n\n```xml\n    <Grid ge:GridEx.TemplateArea=\"\n            Header Header Header &#10;\n            Menu Content SubMenu &#10;\n            Footer Footer Footer &#10;\n          \"\n          ShowGridLines=\"True\">\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Header\"\n                Content=\"Header\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Menu\"\n                Content=\"Menu\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Content\"\n                Content=\"Content\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"SubMenu\"\n                Content=\"SubMenu\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Footer\"\n                Content=\"Footer\" />\n    </Grid>\n```\n\n![Example3](./docs/GridEx/example3.png)\n\n\nRow devision is defined by line feed or `/`.\n* line feed\n    * `\\n`(.cs)\n    * `&#10;`(xaml)\n* `/`\n\n```xml\n    <Grid ge:GridEx.TemplateArea=\"\n            Header Header Header/\n            Menu Content SubMenu/\n            Footer Footer Footer/\n          \">\n```\n\n\n#### Example4 (Named Template Area, working with RowDefinition/ColumnDefintion)\n\n```xml\n    <Grid ge:GridEx.RowDefinition=\"50, *, 30\"\n          ge:GridEx.ColumnDefinition=\"*, 2*, 100\"\n          ge:GridEx.TemplateArea=\"\n            Header Header Header/\n            Menu Content SubMenu/\n            Footer Footer Footer/\n          \"\n          ShowGridLines=\"True\">\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Header\"\n                Content=\"Header\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Menu\"\n                Content=\"Menu\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Content\"\n                Content=\"Content\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"SubMenu\"\n                Content=\"SubMenu\" />\n        <Button Margin=\"5\"\n                ge:GridEx.AreaName=\"Footer\"\n                Content=\"Footer\" />\n    </Grid>\n```\n\n![Example4](./docs/GridEx/example4.png)\n\n\n\n\n##### Attached Properties(for Grid)\n\n|Property Name|Type|Description|\n|-----|-----|-----|\n|RowDefinition|string|Sets a value that determines row definition of Grid.|\n|ColumnDefinition|string|Sets a value that determines column definition of Grid.|\n|TemplateArea|string|Sets a definition of grid devision and area names. |\n\n##### Attached Properties(for Grid children)\n\n|Property Name|Type|Description|\n|-----|-----|-----|\n|Area|string|Sets a value that determines Row, Column, RowSpan, ColumnSpan properties.|\n|AreaName|string|Sets a name of regions for item's belong.(use with `TemplateArea` property)|\n\n\n\n#### Example5 (Auto fill children)\n\n![demo2](./docs/GridEx/demo2.gif)\n\n\n##### Attached Properties(for Grid)\n|Property Name|Type|Description|\n|-----|-----|-----|\n|AutoFillChildren|string|Gets or sets a value that indicates whether the Grid arranges its children to each cell.|\n|AutoFillOrientation|string|Sets a value that determines auto fill orientation.|\n##### Attached Properties(for Grid children)\n|Property Name|Type|Description|\n|-----|-----|-----|\n|AutoFillSpan|string|Sets a value that determines cell span value that is used during AutoFill process.|\n\n\n```xml\n    <Grid ge:GridEx.ColumnDefinition=\"*, *\"\n        ge:GridEx.RowDefinition=\"Auto, Auto, Auto\"\n        ge:GridEx.AutoFillChildren=\"True\"\n        ShowGridLines=\"True\">\n        <TextBlock Text=\"Name:\" />\n        <TextBox VerticalAlignment=\"Top\" Margin=\"5\"/>\n\n        <TextBlock Text=\"Age:\" />\n        <TextBox VerticalAlignment=\"Top\" Margin=\"5\"/>\n\n        <Button ge:GridEx.Area=\"2, 1, 1, 1\"\n            Margin=\"5\" Width=\"60\"\n            HorizontalAlignment=\"Right\"\n            Content=\"OK\" />\n    </Grid>\n```\n![Example5](./docs/GridEx/example5.png)\n\n\n##### AutoFillChildren with Hidden/Collapsed items\n\n```xml\n    <Grid ge:GridEx.ColumnDefinition=\"*, *, *\"\n          ge:GridEx.RowDefinition=\"*, *\"\n          ge:GridEx.AutoFillChildren=\"True\">\n        <Button Content=\"1\" Visibility=\"Hidden\"/>\n        <Button Content=\"2\" />\n        <Button Content=\"3\" />\n        <Button Content=\"4\" />\n        <Button Content=\"5\" Visibility=\"Collapsed\" />\n        <Button Content=\"6\" />\n    </Grid>\n```\n![Example5_1](./docs/GridEx/example5_1.png)\n\n\n\n##### AutoFillChildren with pinned items\n\n```xml\n    <Grid ge:GridEx.ColumnDefinition=\"*, *, *\"\n          ge:GridEx.RowDefinition=\"*, *\"\n          ge:GridEx.AutoFillChildren=\"True\">\n        <Button Content=\"1\" />\n        <Button Content=\"2\" />\n        <Button Content=\"3\" />\n        <Button Content=\"4\" />\n        <Button Content=\"Fixed Item\" ge:GridEx.Area=\"0,1,1,1\"/>\n    </Grid>\n```\n\n![Example5_2](./docs/GridEx/example5_2.png)\n\n\n\n### WrapPanelEx **(WPF Only)**\nWrapPanelEx is Helper class that provide adaptive layout for WrapPanel.\n\n![demo](./docs/WrapPanelEx/demo.gif)\n\n#### Example1\nWrapPanelEx.AdaptiveLayout property makes WrapPanel into UWP Community Toolkit's [AdaptiveGridView](https://docs.microsoft.com/en-us/windows/uwpcommunitytoolkit/controls/AdaptiveGridView) like layout.\n\n```xml\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition />\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <WrapPanel ItemWidth=\"200\" ItemHeight=\"70\"\n                   Orientation=\"Horizontal\"\n                   ge:WrapPanelEx.AdaptiveLayout=\"{Binding IsChecked, ElementName=chkIsAdaptive}\">\n            <Button />\n            <Button />\n            <Button />\n            <Button />\n            <Button />\n            <Button />\n            <Button />\n        </WrapPanel>\n        <CheckBox x:Name=\"chkIsAdaptive\"\n                  Grid.Row=\"1\" Margin=\"5\"\n                  Content=\"WrapPanelEx.AdaptiveLayout\"/>\n    </Grid>\n```\n\n## Lisence\n[MIT](LICENSE)\n"
  },
  {
    "path": "Sample/BasicSample.Uwp/App.xaml",
    "content": "﻿<Application\n    x:Class=\"BasicSample.Uwp.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:BasicSample.Uwp\"\n    RequestedTheme=\"Light\">\n\n</Application>\n"
  },
  {
    "path": "Sample/BasicSample.Uwp/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Activation;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace BasicSample.Uwp\n{\n    /// <summary>\n    /// 既定の Application クラスを補完するアプリケーション固有の動作を提供します。\n    /// </summary>\n    sealed partial class App : Application\n    {\n        /// <summary>\n        /// 単一アプリケーション オブジェクトを初期化します。これは、実行される作成したコードの\n        ///最初の行であるため、main() または WinMain() と論理的に等価です。\n        /// </summary>\n        public App()\n        {\n            this.InitializeComponent();\n            this.Suspending += OnSuspending;\n        }\n\n        /// <summary>\n        /// アプリケーションがエンド ユーザーによって正常に起動されたときに呼び出されます。他のエントリ ポイントは、\n        /// アプリケーションが特定のファイルを開くために起動されたときなどに使用されます。\n        /// </summary>\n        /// <param name=\"e\">起動の要求とプロセスの詳細を表示します。</param>\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\n        {\n#if DEBUG\n            if (System.Diagnostics.Debugger.IsAttached)\n            {\n                this.DebugSettings.EnableFrameRateCounter = true;\n            }\n#endif\n            Frame rootFrame = Window.Current.Content as Frame;\n\n            // ウィンドウに既にコンテンツが表示されている場合は、アプリケーションの初期化を繰り返さずに、\n            // ウィンドウがアクティブであることだけを確認してください\n            if (rootFrame == null)\n            {\n                // ナビゲーション コンテキストとして動作するフレームを作成し、最初のページに移動します\n                rootFrame = new Frame();\n\n                rootFrame.NavigationFailed += OnNavigationFailed;\n\n                if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)\n                {\n                    //TODO: 以前中断したアプリケーションから状態を読み込みます\n                }\n\n                // フレームを現在のウィンドウに配置します\n                Window.Current.Content = rootFrame;\n            }\n\n            if (e.PrelaunchActivated == false)\n            {\n                if (rootFrame.Content == null)\n                {\n                    // ナビゲーション スタックが復元されない場合は、最初のページに移動します。\n                    // このとき、必要な情報をナビゲーション パラメーターとして渡して、新しいページを\n                    //構成します\n                    rootFrame.Navigate(typeof(MainPage), e.Arguments);\n                }\n                // 現在のウィンドウがアクティブであることを確認します\n                Window.Current.Activate();\n            }\n        }\n\n        /// <summary>\n        /// 特定のページへの移動が失敗したときに呼び出されます\n        /// </summary>\n        /// <param name=\"sender\">移動に失敗したフレーム</param>\n        /// <param name=\"e\">ナビゲーション エラーの詳細</param>\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\n        {\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\n        }\n\n        /// <summary>\n        /// アプリケーションの実行が中断されたときに呼び出されます。\n        /// アプリケーションが終了されるか、メモリの内容がそのままで再開されるかに\n        /// かかわらず、アプリケーションの状態が保存されます。\n        /// </summary>\n        /// <param name=\"sender\">中断要求の送信元。</param>\n        /// <param name=\"e\">中断要求の詳細。</param>\n        private void OnSuspending(object sender, SuspendingEventArgs e)\n        {\n            var deferral = e.SuspendingOperation.GetDeferral();\n            //TODO: アプリケーションの状態を保存してバックグラウンドの動作があれば停止します\n            deferral.Complete();\n        }\n    }\n}\n"
  },
  {
    "path": "Sample/BasicSample.Uwp/BasicSample.Uwp.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProjectGuid>{416D9AA6-F3E7-4338-B9A3-E060060DAF0C}</ProjectGuid>\n    <OutputType>AppContainerExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BasicSample.Uwp</RootNamespace>\n    <AssemblyName>BasicSample.Uwp</AssemblyName>\n    <DefaultLanguage>ja-JP</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion>10.0.14393.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.10586.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <PackageCertificateKeyFile>BasicSample.Uwp_TemporaryKey.pfx</PackageCertificateKeyFile>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x86</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>ARM</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <PlatformTarget>x64</PlatformTarget>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n    <Prefer32Bit>true</Prefer32Bit>\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->\n    <None Include=\"project.json\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"MainPage.xaml.cs\">\n      <DependentUpon>MainPage.xaml</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <AppxManifest Include=\"Package.appxmanifest\">\n      <SubType>Designer</SubType>\n    </AppxManifest>\n    <None Include=\"BasicSample.Uwp_TemporaryKey.pfx\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"Properties\\Default.rd.xml\" />\n    <Content Include=\"Assets\\LockScreenLogo.scale-200.png\" />\n    <Content Include=\"Assets\\SplashScreen.scale-200.png\" />\n    <Content Include=\"Assets\\Square150x150Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.scale-200.png\" />\n    <Content Include=\"Assets\\Square44x44Logo.targetsize-24_altform-unplated.png\" />\n    <Content Include=\"Assets\\StoreLogo.png\" />\n    <Content Include=\"Assets\\Wide310x150Logo.scale-200.png\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainPage.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\GridExtra.Uwp\\GridExtra.Uwp.csproj\">\n      <Project>{fe7a5887-17bc-48e9-b601-815a2fdbf2a0}</Project>\n      <Name>GridExtra.Uwp</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Sample/BasicSample.Uwp/MainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"BasicSample.Uwp.MainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:BasicSample.Uwp\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:ge=\"using:SourceChord.GridExtra\"\n    mc:Ignorable=\"d\">\n\n    <Grid x:Name=\"grid\"\n          Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\"\n          ge:GridEx.ColumnDefinition=\"*, *, *, *\"\n          ge:GridEx.TemplateArea=\"\n            Header Header Header &#10;\n            Menu Content SubMenu &#10;\n            Footer Footer Footer &#10;\n          \">\n        <Grid.Resources>\n            <Style TargetType=\"Button\">\n                <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n            </Style>\n        </Grid.Resources>\n        <Button Content=\"Button\" Margin=\"5\" ge:GridEx.AreaName=\"Header\" />\n        <Button Content=\"Menu\" Margin=\"5\" ge:GridEx.AreaName=\"Menu\"/>\n        <Button Content=\"Content\" Margin=\"5\" ge:GridEx.Area=\"1,1,2,2\" Click=\"Button_Click\"/>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Sample/BasicSample.Uwp/MainPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 を参照してください\n\nnamespace BasicSample.Uwp\n{\n    /// <summary>\n    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。\n    /// </summary>\n    public sealed partial class MainPage : Page\n    {\n        public MainPage()\n        {\n            this.InitializeComponent();\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {\n            var temp = @\"\n            Header Header SubMenu\n            Menu Content SubMenu\n            Footer Footer Footer\n\";\n            SourceChord.GridExtra.GridEx.SetTemplateArea(grid, temp);\n        }\n    }\n}\n"
  },
  {
    "path": "Sample/BasicSample.Uwp/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n  IgnorableNamespaces=\"uap mp\">\n\n  <Identity\n    Name=\"6b093e0d-5afb-44a5-bf33-5ae8c9995de8\"\n    Publisher=\"CN=minami\"\n    Version=\"1.0.0.0\" />\n\n  <mp:PhoneIdentity PhoneProductId=\"6b093e0d-5afb-44a5-bf33-5ae8c9995de8\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\"/>\n\n  <Properties>\n    <DisplayName>BasicSample.Uwp</DisplayName>\n    <PublisherDisplayName>minami</PublisherDisplayName>\n    <Logo>Assets\\StoreLogo.png</Logo>\n  </Properties>\n\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.0.0\" MaxVersionTested=\"10.0.0.0\" />\n  </Dependencies>\n\n  <Resources>\n    <Resource Language=\"x-generate\"/>\n  </Resources>\n\n  <Applications>\n    <Application Id=\"App\"\n      Executable=\"$targetnametoken$.exe\"\n      EntryPoint=\"BasicSample.Uwp.App\">\n      <uap:VisualElements\n        DisplayName=\"BasicSample.Uwp\"\n        Square150x150Logo=\"Assets\\Square150x150Logo.png\"\n        Square44x44Logo=\"Assets\\Square44x44Logo.png\"\n        Description=\"BasicSample.Uwp\"\n        BackgroundColor=\"transparent\">\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Wide310x150Logo.png\"/>\n        <uap:SplashScreen Image=\"Assets\\SplashScreen.png\" />\n      </uap:VisualElements>\n    </Application>\n  </Applications>\n\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n  </Capabilities>\n</Package>"
  },
  {
    "path": "Sample/BasicSample.Uwp/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"BasicSample.Uwp\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"BasicSample.Uwp\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Sample/BasicSample.Uwp/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Seralize=\"All\" />\n-->\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!--\n      An Assembly element with Name=\"*Application*\" applies to all assemblies in\n      the application package. The asterisks are not wildcards.\n    -->\n    <Assembly Name=\"*Application*\" Dynamic=\"Required All\"/>\n    \n    \n    <!-- Add your application specific runtime directives here. -->\n\n\n  </Application>\n</Directives>\n"
  },
  {
    "path": "Sample/BasicSample.Uwp/project.json",
    "content": "﻿{\n  \"dependencies\": {\n    \"Microsoft.NETCore.UniversalWindowsPlatform\": \"5.1.0\"\n  },\n  \"frameworks\": {\n    \"uap10.0\": {}\n  },\n  \"runtimes\": {\n    \"win10-arm\": {},\n    \"win10-arm-aot\": {},\n    \"win10-x86\": {},\n    \"win10-x86-aot\": {},\n    \"win10-x64\": {},\n    \"win10-x64-aot\": {}\n  }\n}"
  },
  {
    "path": "Sample/BasicSample.Wpf/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5.2\" />\n    </startup>\n</configuration>"
  },
  {
    "path": "Sample/BasicSample.Wpf/App.xaml",
    "content": "﻿<Application x:Class=\"BasicSample.Wpf.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:local=\"clr-namespace:BasicSample.Wpf\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n         \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/App.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Windows;\n\nnamespace BasicSample.Wpf\n{\n    /// <summary>\n    /// App.xaml の相互作用ロジック\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/BasicSample.Wpf.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{E180DF3E-1A9F-482E-A7E2-FD7FBB27514B}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BasicSample.Wpf</RootNamespace>\n    <AssemblyName>BasicSample.Wpf</AssemblyName>\n    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <WarningLevel>4</WarningLevel>\n    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xaml\">\n      <RequiredTargetFramework>4.0</RequiredTargetFramework>\n    </Reference>\n    <Reference Include=\"WindowsBase\" />\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ApplicationDefinition Include=\"App.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </ApplicationDefinition>\n    <Page Include=\"MainWindow.xaml\">\n      <Generator>MSBuild:Compile</Generator>\n      <SubType>Designer</SubType>\n    </Page>\n    <Compile Include=\"App.xaml.cs\">\n      <DependentUpon>App.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"MainWindow.xaml.cs\">\n      <DependentUpon>MainWindow.xaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Properties\\AssemblyInfo.cs\">\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <AppDesigner Include=\"Properties\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"App.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\GridExtra.Wpf\\GridExtra.Wpf.csproj\">\n      <Project>{631c583b-5e88-4abd-9926-c18e4addf6c6}</Project>\n      <Name>GridExtra.Wpf</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Sample/BasicSample.Wpf/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"BasicSample.Wpf.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n        xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n        xmlns:local=\"clr-namespace:BasicSample.Wpf\"\n        xmlns:ge=\"clr-namespace:SourceChord.GridExtra;assembly=GridExtra.Wpf\"\n        mc:Ignorable=\"d\"\n        Title=\"MainWindow\" Height=\"350\" Width=\"525\">\n    <Grid x:Name=\"grid\"\n          ge:GridEx.TemplateArea=\"\n            Header Header Header/\n            Menu Content SubMenu/\n            Footer Footer Footer/\n          \">\n        <Button Content=\"Header\"  Margin=\"5\" ge:GridEx.AreaName=\"Header\" />\n        <Button Content=\"Menu\"    Margin=\"5\" ge:GridEx.AreaName=\"Menu\" />\n        <Button Content=\"SubMenu\" Margin=\"5\" ge:GridEx.AreaName=\"SubMenu\" />\n        <Button Content=\"Content\" Margin=\"5\" ge:GridEx.AreaName=\"Content\" Click=\"Button_Click\" />\n        <Button Content=\"Footer\"  Margin=\"5\" ge:GridEx.AreaName=\"Footer\" />\n    </Grid>\n</Window>\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/MainWindow.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Data;\nusing System.Windows.Documents;\nusing System.Windows.Input;\nusing System.Windows.Media;\nusing System.Windows.Media.Imaging;\nusing System.Windows.Navigation;\nusing System.Windows.Shapes;\n\nnamespace BasicSample.Wpf\n{\n    /// <summary>\n    /// MainWindow.xaml の相互作用ロジック\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {\n            var temp = @\"\n            Header  Header\n            Menu    SubMenu\n            Content Content\n            Footer  Footer\n\";\n            SourceChord.GridExtra.GridEx.SetTemplateArea(grid, temp);\n        }\n    }\n}\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\nusing System.Windows;\n\n// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。\n// アセンブリに関連付けられている情報を変更するには、\n// これらの属性値を変更してください。\n[assembly: AssemblyTitle(\"BasicSample.Wpf\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"BasicSample.Wpf\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2016\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから\n// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、\n// その型の ComVisible 属性を true に設定してください。\n[assembly: ComVisible(false)]\n\n//ローカライズ可能なアプリケーションのビルドを開始するには、\n//.csproj ファイルの <UICulture>CultureYouAreCodingWith</UICulture> を\n//<PropertyGroup> 内部で設定します。たとえば、\n//ソース ファイルで英語を使用している場合、<UICulture> を en-US に設定します。次に、\n//下の NeutralResourceLanguage 属性のコメントを解除します。下の行の \"en-US\" を\n//プロジェクト ファイルの UICulture 設定と一致するよう更新します。\n\n//[assembly: NeutralResourcesLanguage(\"en-US\", UltimateResourceFallbackLocation.Satellite)]\n\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //テーマ固有のリソース ディクショナリが置かれている場所\n                                     //(リソースがページ、\n                                     //またはアプリケーション リソース ディクショナリに見つからない場合に使用されます)\n    ResourceDictionaryLocation.SourceAssembly //汎用リソース ディクショナリが置かれている場所\n                                              //(リソースがページ、\n                                              //アプリケーション、またはいずれのテーマ固有のリソース ディクショナリにも見つからない場合に使用されます)\n)]\n\n\n// アセンブリのバージョン情報は次の 4 つの値で構成されています:\n//\n//      メジャー バージョン\n//      マイナー バージョン\n//      ビルド番号\n//      Revision\n//\n// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を \n// 既定値にすることができます:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     このコードはツールによって生成されました。\n//     ランタイム バージョン:4.0.30319.42000\n//\n//     このファイルへの変更は、以下の状況下で不正な動作の原因になったり、\n//     コードが再生成されるときに損失したりします\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BasicSample.Wpf.Properties\n{\n\n\n    /// <summary>\n    ///   ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。\n    /// </summary>\n    // このクラスは StronglyTypedResourceBuilder クラスによって ResGen\n    // または Visual Studio のようなツールを使用して自動生成されました。\n    // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に\n    // ResGen を実行し直すか、または VS プロジェクトをリビルドします。\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources\n    {\n\n        private static global::System.Resources.ResourceManager resourceMan;\n\n        private static global::System.Globalization.CultureInfo resourceCulture;\n\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources()\n        {\n        }\n\n        /// <summary>\n        ///   このクラスで使用されるキャッシュされた ResourceManager インスタンスを返します。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager\n        {\n            get\n            {\n                if ((resourceMan == null))\n                {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"BasicSample.Wpf.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n\n        /// <summary>\n        ///   厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、\n        ///   現在のスレッドの CurrentUICulture プロパティをオーバーライドします。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture\n        {\n            get\n            {\n                return resourceCulture;\n            }\n            set\n            {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "Sample/BasicSample.Wpf/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BasicSample.Wpf.Properties\n{\n\n\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"11.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase\n    {\n\n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n\n        public static Settings Default\n        {\n            get\n            {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Sample/BasicSample.Wpf/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>"
  }
]