This commit is contained in:
Arlo Godfrey 2022-04-04 16:26:01 -05:00
Родитель 02751dfb2c 92aa2e2630
Коммит 2df29a54d6
26 изменённых файлов: 432 добавлений и 201 удалений

18
.config/dotnet-tools.json Normal file
Просмотреть файл

@ -0,0 +1,18 @@
{
"version": 1,
"isRoot": true,
"tools": {
"uno.check": {
"version": "1.1.1",
"commands": [
"uno-check"
]
},
"xamlstyler.console": {
"version": "3.2008.4",
"commands": [
"xstyler"
]
}
}
}

Просмотреть файл

@ -1,6 +1,10 @@
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
# Generated code
[*{_AssemblyInfo.cs,.g.cs}]
generated_code = true
# All files
[*]
@ -18,8 +22,40 @@ indent_size = 4
indent_style = space
# New line preferences
end_of_line = unset
insert_final_newline = false
end_of_line = crlf
trim_trailing_whitespace = true
insert_final_newline = true
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_compound_assignment = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_namespace_match_folder = true:suggestion
dotnet_style_prefer_simplified_interpolation = true:suggestion
dotnet_style_readonly_field = true:suggestion
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
dotnet_style_allow_multiple_blank_lines_experimental = true:silent
dotnet_style_allow_statement_immediately_after_block_experimental = true:silent
dotnet_code_quality_unused_parameters = all:suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_qualification_for_field = true:silent
dotnet_style_qualification_for_property = true:silent
dotnet_style_qualification_for_method = true:silent
dotnet_style_qualification_for_event = true:silent
#### Build files ####
@ -214,9 +250,9 @@ dotnet_naming_style.prefix_interface_interface_with_i.required_prefix
# Naming Rules
# Async
dotnet_naming_rule.async_methods_end_in_async.severity = silent
dotnet_naming_rule.async_methods_end_in_async.severity = silent
dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_symbols.any_async_methods.applicable_kinds = method
dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
@ -226,45 +262,45 @@ dotnet_naming_style.end_in_async.required_suffix
dotnet_naming_style.end_in_async.capitalization = pascal_case
# Constant fields must be PascalCase
dotnet_naming_rule.constant_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.constant_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.constant_fields_must_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_must_be_pascal_case.style = pascal_case
dotnet_naming_rule.constant_fields_must_be_pascal_case.style = pascal_case
# Public, internal and protected readonly fields must be PascalCase
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.symbols = non_private_readonly_fields
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.style = pascal_case
# Static readonly fields must be PascalCase
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.symbols = static_readonly_fields
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.style = pascal_case
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.style = pascal_case
# Private readonly fields must be camelCase
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.severity = silent
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.severity = silent
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.symbols = private_readonly_fields
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.style = camel_case
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.style = camel_case
# Public and internal fields must be PascalCase
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.symbols = public_internal_protected_fields
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.style = pascal_case
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.style = pascal_case
# Private and protected fields must be camelCase
dotnet_naming_rule.private_fields_must_be_camel_case.severity = silent
dotnet_naming_rule.private_fields_must_be_camel_case.severity = silent
dotnet_naming_rule.private_fields_must_be_camel_case.symbols = private_protected_fields
dotnet_naming_rule.private_fields_must_be_camel_case.style = prefix_private_field_with_underscore
dotnet_naming_rule.private_fields_must_be_camel_case.style = prefix_private_field_with_underscore
# Public members must be capitalized
dotnet_naming_rule.public_members_must_be_capitalized.severity = silent
dotnet_naming_rule.public_members_must_be_capitalized.severity = silent
dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols
dotnet_naming_rule.public_members_must_be_capitalized.style = first_upper
dotnet_naming_rule.public_members_must_be_capitalized.style = first_upper
# Parameters must be camelCase
dotnet_naming_rule.parameters_must_be_camel_case.severity = silent
dotnet_naming_rule.parameters_must_be_camel_case.severity = silent
dotnet_naming_rule.parameters_must_be_camel_case.symbols = parameters
dotnet_naming_rule.parameters_must_be_camel_case.style = camel_case
dotnet_naming_rule.parameters_must_be_camel_case.style = camel_case
# Class, struct, enum and delegates must be PascalCase
dotnet_naming_rule.non_interface_types_must_be_pascal_case.severity = silent
dotnet_naming_rule.non_interface_types_must_be_pascal_case.severity = silent
dotnet_naming_rule.non_interface_types_must_be_pascal_case.symbols = non_interface_types
dotnet_naming_rule.non_interface_types_must_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_interface_types_must_be_pascal_case.style = pascal_case
# Interfaces must be PascalCase and start with an 'I'
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.severity = silent
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.severity = silent
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.symbols = interface_types
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.style = prefix_interface_interface_with_i
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.style = prefix_interface_interface_with_i
# prefix_private_field_with_underscore - Private fields must be prefixed with _
dotnet_naming_style.prefix_private_field_with_underscore.capitalization = camel_case
dotnet_naming_style.prefix_private_field_with_underscore.required_prefix = _
@ -373,3 +409,23 @@ dotnet_diagnostic.SA1629.severity = none
dotnet_diagnostic.SA1633.severity = none
dotnet_diagnostic.SA1634.severity = none
dotnet_diagnostic.SA1652.severity = none
csharp_using_directive_placement = outside_namespace:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_style_namespace_declarations = block_scoped:silent
csharp_style_expression_bodied_local_functions = false:silent
csharp_style_prefer_null_check_over_type_check = true:suggestion
csharp_style_prefer_local_over_anonymous_function = true:suggestion
csharp_style_prefer_index_operator = true:suggestion
csharp_style_prefer_range_operator = true:suggestion
csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
csharp_style_prefer_tuple_swap = true:suggestion
csharp_style_unused_value_assignment_preference = discard_variable:suggestion
csharp_style_unused_value_expression_statement_preference = discard_variable:silent
csharp_prefer_static_local_function = true:suggestion
csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
csharp_style_prefer_pattern_matching = true:silent
csharp_style_prefer_switch_expression = true:suggestion
csharp_style_prefer_not_pattern = true:suggestion
csharp_style_prefer_extended_property_pattern = true:suggestion

24
.github/workflows/build.yml поставляемый
Просмотреть файл

@ -24,21 +24,31 @@ jobs:
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Install .NET Core SDK
# Needed until XAML Styler updates to .NET 6
- name: Install .NET Core 3.1 SDK
uses: actions/setup-dotnet@v1
with:
dotnet-version: '3.1.x'
- name: Install .NET 6 SDK
uses: actions/setup-dotnet@v1
with:
dotnet-version: '6.0.201'
- name: Install Uno Check
run: dotnet tool install -g Uno.Check
- name: Run Uno Check to Install Dependencies
run: uno-check --ci --fix --non-interactive --skip wsl --skip androidemulator #--verbose
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- name: Checkout Repository
uses: actions/checkout@v2
# Restore Tools from Manifest list in the Repository
- name: Restore dotnet tools
run: dotnet tool restore
- name: Check XAML Styling
run: ./ApplyXamlStyling.ps1 -Passive
- name: Run Uno Check to Install Dependencies
run: dotnet tool run uno-check --ci --fix --non-interactive --skip wsl --skip androidemulator #--verbose
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.3

91
ApplyXamlStyling.ps1 Normal file
Просмотреть файл

@ -0,0 +1,91 @@
param(
[Parameter(HelpMessage="Runs against last commit vs. current changes")]
[switch]$LastCommit = $false,
[Parameter(HelpMessage="Runs against staged files vs. current changes")]
[switch]$Staged = $false,
[Parameter(HelpMessage="Runs against main vs. current branch")]
[switch]$Main = $false,
[Parameter(HelpMessage="Runs a passive check against all files in the repo for the CI")]
[switch]$Passive = $false
)
Write-Output "Restoring dotnet tools..."
dotnet tool restore
if (-not $Passive)
{
# Look for unstaged changed files by default
$gitDiffCommand = "git diff --name-only --diff-filter=ACM"
if ($Main)
{
Write-Output 'Checking Current Branch against `main` Files Only'
$branch = git status | Select-String -Pattern "On branch (?<branch>.*)$"
if ($null -eq $branch.Matches)
{
$branch = git status | Select-String -Pattern "HEAD detached at (?<branch>.*)$"
if ($null -eq $branch.Matches)
{
Write-Error 'Don''t know how to fetch branch from `git status`:'
git status | Write-Error
exit 1
}
}
$branch = $branch.Matches.groups[1].Value
$gitDiffCommand = "git diff origin/main $branch --name-only --diff-filter=ACM"
}
elseif ($Staged)
{
# Look for staged files
Write-Output "Checking Staged Files Only"
$gitDiffCommand = "git diff --cached --name-only --diff-filter=ACM"
}
elseif ($LastCommit)
{
# Look at last commit files
Write-Output "Checking the Last Commit's Files Only"
$gitDiffCommand = "git diff HEAD^ HEAD --name-only --diff-filter=ACM"
}
else
{
Write-Output "Checking Current Unstaged Files Only"
}
Write-Output "Running Git Diff: $gitDiffCommand"
$files = Invoke-Expression $gitDiffCommand | Select-String -Pattern "\.xaml$"
if ($files.count -gt 0)
{
dotnet tool run xstyler -p -c .\settings.xamlstyler -f $files
}
else
{
Write-Output "No XAML Files found to style..."
}
}
else
{
Write-Output "Checking all files (passively)"
$files = Get-ChildItem *.xaml -Recurse | Select-Object -ExpandProperty FullName
if ($files.count -gt 0)
{
dotnet tool run xstyler -p -c .\settings.xamlstyler -f $files
if ($lastExitCode -eq 1)
{
Write-Error 'XAML Styling is incorrect, please run `ApplyXamlStyling.ps1` locally.'
}
# Return XAML Styler Status
exit $lastExitCode
}
else
{
exit 0
}
}

Просмотреть файл

@ -1,7 +1,6 @@
<Application
x:Class="CommunityToolkit.Labs.Shared.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application x:Class="CommunityToolkit.Labs.Shared.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
</Application.Resources>

Просмотреть файл

@ -1,25 +1,23 @@
<Page
x:Class="CommunityToolkit.Labs.Shared.AppLoadingView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CommunityToolkit.Labs.Shared"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Page x:Class="CommunityToolkit.Labs.Shared.AppLoadingView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CommunityToolkit.Labs.Shared"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Grid>
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center"
Spacing="10">
<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"
Spacing="10">
<ProgressRing
Width="50"
Height="50"
IsActive="{x:Bind IsLoading, Mode=OneWay}" />
<ProgressRing Width="50"
Height="50"
IsActive="{x:Bind IsLoading, Mode=OneWay}" />
<TextBlock FontSize="18" Text="{x:Bind LoadingMessage, Mode=OneWay}" />
<TextBlock FontSize="18"
Text="{x:Bind LoadingMessage, Mode=OneWay}" />
</StackPanel>
</Grid>
</Page>

Просмотреть файл

@ -1,15 +1,15 @@
<Page
x:Class="CommunityToolkit.Labs.Shared.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d">
<Page x:Class="CommunityToolkit.Labs.Shared.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Grid>
<muxc:NavigationView MenuItemsSource="{x:Bind NavigationViewItems}" SelectionChanged="OnSelectionChanged">
<muxc:NavigationView MenuItemsSource="{x:Bind NavigationViewItems}"
SelectionChanged="OnSelectionChanged">
<Frame x:Name="NavFrame" />
</muxc:NavigationView>
</Grid>

Просмотреть файл

@ -1,41 +1,44 @@
<UserControl
x:Class="CommunityToolkit.Labs.Shared.Renderers.GeneratedSampleOptionsRenderer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CommunityToolkit.Labs.Shared.Renderers"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
xmlns:attrs="using:CommunityToolkit.Labs.Core.SourceGenerators.Attributes"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:metadata="using:CommunityToolkit.Labs.Core.SourceGenerators.Metadata"
d:DesignHeight="300"
d:DesignWidth="400"
mc:Ignorable="d">
<UserControl x:Class="CommunityToolkit.Labs.Shared.Renderers.GeneratedSampleOptionsRenderer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:attrs="using:CommunityToolkit.Labs.Core.SourceGenerators.Attributes"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CommunityToolkit.Labs.Shared.Renderers"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:metadata="using:CommunityToolkit.Labs.Core.SourceGenerators.Metadata"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
d:DesignHeight="300"
d:DesignWidth="400"
mc:Ignorable="d">
<UserControl.Resources>
<local:GeneratedSampleOptionTemplateSelector x:Key="GeneratedSampleOptionTemplateSelector">
<local:GeneratedSampleOptionTemplateSelector.BoolOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleBoolOptionMetadataViewModel">
<StackPanel>
<TextBlock Text="{x:Bind Title}" Visibility="{x:Bind local:GeneratedSampleOptionsRenderer.NullOrWhiteSpaceToVisibility(Title)}" />
<CheckBox Content="{x:Bind Label}" IsChecked="{x:Bind BoolValue, Mode=TwoWay}" />
<TextBlock Text="{x:Bind Title}"
Visibility="{x:Bind local:GeneratedSampleOptionsRenderer.NullOrWhiteSpaceToVisibility(Title)}" />
<CheckBox Content="{x:Bind Label}"
IsChecked="{x:Bind BoolValue, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.BoolOptionTemplate>
<local:GeneratedSampleOptionTemplateSelector.MultiChoiceOptionTemplate>
<DataTemplate x:DataType="metadata:ToolkitSampleMultiChoiceOptionMetadataViewModel">
<StackPanel>
<TextBlock Text="{x:Bind Title}" Visibility="{x:Bind local:GeneratedSampleOptionsRenderer.NullOrWhiteSpaceToVisibility(Title)}" />
<TextBlock Text="{x:Bind Title}"
Visibility="{x:Bind local:GeneratedSampleOptionsRenderer.NullOrWhiteSpaceToVisibility(Title)}" />
<muxc:RadioButtons ItemsSource="{x:Bind Options}"
SelectedItem="{x:Bind Value, Mode=TwoWay}"
SelectedIndex="0"/>
SelectedIndex="0"
SelectedItem="{x:Bind Value, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</local:GeneratedSampleOptionTemplateSelector.MultiChoiceOptionTemplate>
</local:GeneratedSampleOptionTemplateSelector>
</UserControl.Resources>
<ItemsControl ItemsSource="{x:Bind SampleOptions, Mode=OneWay}" ItemTemplateSelector="{StaticResource GeneratedSampleOptionTemplateSelector}">
<ItemsControl ItemTemplateSelector="{StaticResource GeneratedSampleOptionTemplateSelector}"
ItemsSource="{x:Bind SampleOptions, Mode=OneWay}">
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Margin" Value="0,15" />

Просмотреть файл

@ -1,12 +1,12 @@
<Page
x:Class="CommunityToolkit.Labs.Shared.Renderers.ToolkitSampleRenderer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CommunityToolkit.Labs.Shared"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Page x:Class="CommunityToolkit.Labs.Shared.Renderers.ToolkitSampleRenderer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CommunityToolkit.Labs.Shared"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
@ -20,10 +20,9 @@
<ContentControl Content="{x:Bind SampleControlInstance, Mode=OneWay}" />
<Border
Grid.RowSpan="2"
Grid.Column="1"
Padding="20">
<Border Grid.RowSpan="2"
Grid.Column="1"
Padding="20">
<ContentControl Content="{x:Bind SampleOptionsPaneInstance, Mode=OneWay}" />
</Border>
@ -35,12 +34,14 @@
<PivotItem Header="XAML">
<ScrollViewer>
<TextBlock IsTextSelectionEnabled="True" Text="{x:Bind XamlCode, Mode=OneWay}" />
<TextBlock win:IsTextSelectionEnabled="True"
Text="{x:Bind XamlCode, Mode=OneWay}" />
</ScrollViewer>
</PivotItem>
<PivotItem Header="C#">
<ScrollViewer>
<TextBlock IsTextSelectionEnabled="True" Text="{x:Bind CSharpCode, Mode=OneWay}" />
<TextBlock win:IsTextSelectionEnabled="True"
Text="{x:Bind CSharpCode, Mode=OneWay}" />
</ScrollViewer>
</PivotItem>
</Pivot>

Просмотреть файл

@ -167,7 +167,7 @@ namespace CommunityToolkit.Labs.Shared.Renderers
return textContents;
}
catch (Exception ex)
catch (Exception)
{
return null;
}

Просмотреть файл

@ -8,7 +8,7 @@
<!--
TargetFramework for WasmLibTargetFramework, WpfLibTargetFramework, and LinuxLibTargetFramework all use the same value.
This can't be removed during the evaluation phase without breaking things, so we emit them entirely
This can't be removed during the evaluation phase without breaking things, so we omit them entirely
and use the value directly.
-->
<TargetFrameworks>

Просмотреть файл

@ -1,6 +1,12 @@
<Project>
<PropertyGroup>
<RepositoryDirectory>$(MSBuildThisFileDirectory)</RepositoryDirectory>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<Import Project="Windows.Toolkit.Common.props" />
@ -13,4 +19,4 @@
<EmbedUntrackedSources>true</EmbedUntrackedSources>
</PropertyGroup>
</Project>
</Project>

Просмотреть файл

@ -1,18 +1,17 @@
<Page
x:Class="CanvasLayout.Sample.SampleOne.SamplePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CanvasLayout.Sample"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page x:Class="CanvasLayout.Sample.SampleOne.SamplePage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CanvasLayout.Sample"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel>
<TextBlock x:Name="PrimaryText"
Text="Hello world! Samples coming soon™."
FontFamily="{x:Bind TextFontFamily, Mode=OneWay}"
FontSize="{x:Bind TextSize, Mode=OneWay}"
Foreground="{x:Bind TextForeground, Mode=OneWay}"
Visibility="{x:Bind IsTextVisible, Mode=OneWay}"
FontSize="{x:Bind TextSize, Mode=OneWay}" />
Text="Hello world! Samples coming soon™."
Visibility="{x:Bind IsTextVisible, Mode=OneWay}" />
</StackPanel>
</Page>

Просмотреть файл

@ -1,38 +1,38 @@
<Page
x:Class="CanvasLayout.Sample.SampleThree.SamplePage3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="using:CanvasLayout.Sample.SampleThree"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
xmlns:labs="using:CommunityToolkit.Labs.WinUI"
xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Page x:Class="CanvasLayout.Sample.SampleThree.SamplePage3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:labs="using:CommunityToolkit.Labs.WinUI"
xmlns:local="using:CanvasLayout.Sample.SampleThree"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
xmlns:win="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<ScrollViewer
HorizontalScrollMode="Auto"
HorizontalScrollBarVisibility="Auto"
VerticalScrollMode="Auto"
VerticalScrollBarVisibility="Auto">
<ScrollViewer HorizontalScrollBarVisibility="Auto"
HorizontalScrollMode="Auto"
VerticalScrollBarVisibility="Auto"
VerticalScrollMode="Auto">
<muxc:ItemsRepeater ItemsSource="{x:Bind Items}">
<muxc:ItemsRepeater.Layout>
<labs:CanvasLayout/>
<labs:CanvasLayout />
</muxc:ItemsRepeater.Layout>
<muxc:ItemsRepeater.ItemTemplate>
<DataTemplate x:DataType="local:CanvasItem">
<Border Width="{x:Bind Width}" Height="{x:Bind Height}"
CornerRadius="9999"
<Border Width="{x:Bind Width}"
Height="{x:Bind Height}"
Background="Red"
BorderBrush="White" BorderThickness="2">
<TextBlock Text="{x:Bind Text}"
Foreground="White"
BorderBrush="White"
BorderThickness="2"
CornerRadius="9999">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
win:TextLineBounds="Tight"
FontSize="24"
FontWeight="Bold"
HorizontalAlignment="Center"
win:TextLineBounds="Tight"
VerticalAlignment="Center"/>
Foreground="White"
Text="{x:Bind Text}" />
</Border>
</DataTemplate>
</muxc:ItemsRepeater.ItemTemplate>

Просмотреть файл

@ -1,15 +1,16 @@
<UserControl
x:Class="CanvasLayout.Sample.SampleTwo.SamplePage2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CanvasLayout.Sample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<UserControl x:Class="CanvasLayout.Sample.SampleTwo.SamplePage2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CanvasLayout.Sample"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="400"
mc:Ignorable="d">
<Grid>
<TextBlock x:Name="PrimaryText" FontSize="18" Text="Samples coming soon™. Hello world!" />
<TextBlock x:Name="PrimaryText"
FontSize="18"
Text="Samples coming soon™. Hello world!" />
</Grid>
</UserControl>

Просмотреть файл

@ -1,24 +1,26 @@
<UserControl
x:Class="CanvasLayout.Sample.SampleTwo.SamplePageOptions"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CanvasLayout.Sample"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<UserControl x:Class="CanvasLayout.Sample.SampleTwo.SamplePageOptions"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:CanvasLayout.Sample"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
d:DesignHeight="300"
d:DesignWidth="400"
mc:Ignorable="d">
<StackPanel Spacing="15">
<StackPanel>
<TextBlock Text="Text:" />
<TextBox x:Name="CustomText" Width="250" TextChanged="TextBox_TextChanged" />
<TextBox x:Name="CustomText"
Width="250"
TextChanged="TextBox_TextChanged" />
</StackPanel>
<StackPanel>
<TextBlock Text="Foreground colors:" />
<muxc:RadioButtons SelectionChanged="OnRadioButtonSelectionChanged" SelectedIndex="0">
<muxc:RadioButtons SelectedIndex="0"
SelectionChanged="OnRadioButtonSelectionChanged">
<x:String>White</x:String>
<x:String>Green</x:String>
<x:String>Yellow</x:String>
@ -27,10 +29,14 @@
<StackPanel>
<TextBlock>
<Run Text="Font size:"/>
<Run Text="{Binding Value, ElementName=FontSizeSlider}"/>
<Run Text="Font size:" />
<Run Text="{Binding Value, ElementName=FontSizeSlider}" />
</TextBlock>
<Slider x:Name="FontSizeSlider" Minimum="1" Maximum="150" StepFrequency="1" ValueChanged="Slider_ValueChanged" />
<Slider x:Name="FontSizeSlider"
Maximum="150"
Minimum="1"
StepFrequency="1"
ValueChanged="Slider_ValueChanged" />
</StackPanel>
</StackPanel>
</UserControl>

Просмотреть файл

@ -3,7 +3,6 @@
<Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))" Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
<Import Project="$(RepositoryDirectory)Common\Labs.Head.props" />
<Import Project="$(RepositoryDirectory)Common\Labs.Uwp.props" />
<PropertyGroup>
<RootNamespace>CanvasLayout.Uwp</RootNamespace>
<AssemblyName>CanvasLayout.Uwp</AssemblyName>

Просмотреть файл

@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))" Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
<Import Project="$(RepositoryDirectory)\Common\Labs.SampleRefs.props" />
<Import Project="$(RepositoryDirectory)Common\Labs.Head.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@ -108,7 +106,6 @@
<AndroidResource Include="Resources\values\Styles.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<Target Name="Issue3897Workaround" Condition=" '$(ManagedDesignTimeBuild)' == 'True' " AfterTargets="_RemoveLegacyDesigner">
<!-- See https://github.com/unoplatform/uno/issues/3897 and https://github.com/xamarin/xamarin-android/issues/5069 for more details -->
<ItemGroup>

Просмотреть файл

@ -1,9 +1,7 @@
<Application x:Class="CommunityToolkit.Labs.WPF.Host.App"
<Application x:Class="CommunityToolkit.Labs.WPF.Host.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CommunityToolkit.Labs.WPF.Host"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
<Application.Resources />
</Application>

Просмотреть файл

@ -1,10 +1,12 @@
<Window x:Class="CommunityToolkit.Labs.WPF.Host.MainWindow"
<Window x:Class="CommunityToolkit.Labs.WPF.Host.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CommunityToolkit.Labs.WPF.Host"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<ContentControl x:Name="root"/>
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<ContentControl x:Name="root" />
</Window>

Просмотреть файл

@ -5,7 +5,6 @@
<Import Project="$(RepositoryDirectory)Common\Labs.Head.props" />
<Import Project="$(RepositoryDirectory)Common\Labs.Uwp.props" />
<Import Project="$(RepositoryDirectory)Common\Labs.SampleRefs.props" />
<PropertyGroup>
<RootNamespace>CommunityToolkit.Labs.Uwp</RootNamespace>
<AssemblyName>CommunityToolkit.Labs.Uwp</AssemblyName>

Просмотреть файл

@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))" Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
<Import Project="$(RepositoryDirectory)\Common\Labs.SampleRefs.props" />
<Import Project="$(RepositoryDirectory)Common\Labs.Head.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
<ProjectGuid>93BFD459-2E21-41C7-9E54-868F5B014DBC</ProjectGuid>
<ProjectGuid>{93BFD459-2E21-41C7-9E54-868F5B014DBC}</ProjectGuid>
<ProjectTypeGuids>{FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Exe</OutputType>
<RootNamespace>CommunityToolkit.Labs</RootNamespace>
@ -174,10 +173,6 @@
<None Include="Info.plist" />
<None Include="Entitlements.plist" />
</ItemGroup>
<ItemGroup>
<Folder Include="Media" Visible="false" />
<Folder Include="Media\AppIcons" Visible="false" />
<Folder Include="Media\LaunchImages" Visible="false" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.CSharp.targets" />
</Project>

Просмотреть файл

@ -1,14 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$([MSBuild]::GetPathOfFileAbove(directory.build.props))" Condition="Exists('$([MSBuild]::GetPathOfFileAbove(directory.build.props))')" />
<Import Project="$(RepositoryDirectory)\Common\Labs.SampleRefs.props" />
<Import Project="$(RepositoryDirectory)Common\Labs.Head.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
<ProjectGuid>34617141-25C4-4FEC-8A15-5B46934F1A99</ProjectGuid>
<ProjectGuid>{34617141-25C4-4FEC-8A15-5B46934F1A99}</ProjectGuid>
<ProjectTypeGuids>{A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Exe</OutputType>
<RootNamespace>CommunityToolkit.Labs.macOS</RootNamespace>
@ -96,11 +94,7 @@
<ImageAsset Include="Assets.xcassets\unologo.imageset\Contents.json" />
<ImageAsset Include="Assets.xcassets\unologo.imageset\unoplatform.jpg" />
</ItemGroup>
<ItemGroup>
<Folder Include="Resources\" />
<Folder Include="Resources\Fonts\" />
<Folder Include="Assets.xcassets\unologo.imageset\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<None Include="Info.plist" />
<None Include="Entitlements.plist" />

Просмотреть файл

@ -5,9 +5,10 @@ VisualStudioVersion = 17.0.31919.166
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{24A1D6DC-FF32-4D9D-9FC2-8EB3E356A2C0}"
ProjectSection(SolutionItems) = preProject
..\.editorconfig = ..\.editorconfig
..\License.md = ..\License.md
..\ReadMe.md = ..\ReadMe.md
.editorconfig = .editorconfig
License.md = License.md
ReadMe.md = ReadMe.md
settings.xamlstyler = settings.xamlstyler
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9898A5F2-6B58-4770-9757-302E93848428}"
@ -56,6 +57,21 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommunityToolkit.Labs.Uwp",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CommunityToolkit.Labs.Wasm", "Platforms\CommunityToolkit.Labs.Wasm\CommunityToolkit.Labs.Wasm.csproj", "{20926634-C200-43A6-AE59-86F9C3878992}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Props", "Props", "{583C9ADC-96A6-446D-9573-7C33B0640915}"
ProjectSection(SolutionItems) = preProject
Directory.Build.props = Directory.Build.props
Directory.Build.targets = Directory.Build.targets
global.json = global.json
Common\Labs.Head.props = Common\Labs.Head.props
Common\Labs.MultiTarget.props = Common\Labs.MultiTarget.props
Common\Labs.SampleRefs.props = Common\Labs.SampleRefs.props
Common\Labs.TargetFrameworks.props = Common\Labs.TargetFrameworks.props
Common\Labs.Uwp.props = Common\Labs.Uwp.props
Common\Labs.Wasm.props = Common\Labs.Wasm.props
Common\Labs.WinAppSdk.props = Common\Labs.WinAppSdk.props
Windows.Toolkit.Common.props = Windows.Toolkit.Common.props
EndProjectSection
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
Common\CommunityToolkit.Labs.Shared\CommunityToolkit.Labs.Shared.projitems*{34617141-25c4-4fec-8a15-5b46934f1a99}*SharedItemsImports = 4
@ -1185,6 +1201,7 @@ Global
{BB83E9E5-D2FA-4273-884D-8CFBFBBD8C12} = {E824D592-EBCB-41C6-A176-D001C5A124CB}
{B3D6DF0B-13DB-493E-9D1A-56343EFEDEA7} = {E824D592-EBCB-41C6-A176-D001C5A124CB}
{20926634-C200-43A6-AE59-86F9C3878992} = {E824D592-EBCB-41C6-A176-D001C5A124CB}
{583C9ADC-96A6-446D-9573-7C33B0640915} = {24A1D6DC-FF32-4D9D-9FC2-8EB3E356A2C0}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1F0A4823-84EF-41AA-BBF9-A07B38DDC555}

Просмотреть файл

@ -5,9 +5,9 @@ VisualStudioVersion = 17.0.31919.166
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{24A1D6DC-FF32-4D9D-9FC2-8EB3E356A2C0}"
ProjectSection(SolutionItems) = preProject
..\.editorconfig = ..\.editorconfig
..\License.md = ..\License.md
..\ReadMe.md = ..\ReadMe.md
.editorconfig = .editorconfig
License.md = License.md
ReadMe.md = ReadMe.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9898A5F2-6B58-4770-9757-302E93848428}"

42
settings.xamlstyler Normal file
Просмотреть файл

@ -0,0 +1,42 @@
{
"AttributesTolerance": 1,
"KeepFirstAttributeOnSameLine": true,
"MaxAttributeCharactersPerLine": 0,
"MaxAttributesPerLine": 1,
"NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter",
"SeparateByGroups": false,
"AttributeIndentation": 0,
"AttributeIndentationStyle": 1,
"RemoveDesignTimeReferences": false,
"EnableAttributeReordering": true,
"AttributeOrderingRuleGroups": [
"x:Class",
"xmlns, xmlns:x",
"xmlns:*",
"x:Key, Key, x:Name, Name, x:Uid, Uid, Title",
"Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom",
"Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight",
"Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex",
"*:*, *",
"PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint",
"mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText",
"Storyboard.*, From, To, Duration"
],
"FirstLineAttributes": "",
"OrderAttributesByName": true,
"PutEndingBracketOnNewLine": false,
"RemoveEndingTagOfEmptyElement": true,
"SpaceBeforeClosingSlash": true,
"RootElementLineBreakRule": 0,
"ReorderVSM": 1,
"ReorderGridChildren": false,
"ReorderCanvasChildren": false,
"ReorderSetters": 0,
"FormatMarkupExtension": true,
"NoNewLineMarkupExtensions": "x:Bind, Binding",
"ThicknessSeparator": 2,
"ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin",
"FormatOnSave": true,
"CommentPadding": 2,
"IndentSize": 4
}