From d451e738b03f9883007ebf689a50325a28b397c3 Mon Sep 17 00:00:00 2001 From: Steven Hobs <47906512+stevenhobs@users.noreply.github.com> Date: Tue, 3 Mar 2026 02:04:30 +0800 Subject: [PATCH] init --- .editorconfig | 398 +++++++++++++++++++++++++++++++ .gitignore | 482 ++++++++++++++++++++++++++++++++++++++ App.xaml | 15 ++ App.xaml.cs | 18 ++ Assets/icons/app.ico | Bin 0 -> 17014 bytes Assets/icons/icon.png | Bin 0 -> 34390 bytes Assets/icons/titlebar.ico | Bin 0 -> 17014 bytes Usings.cs | 7 + Views/MainWindow.xaml | 26 ++ Views/MainWindow.xaml.cs | 13 + WinUI.csproj | 58 +++++ app.manifest | 17 ++ 12 files changed, 1034 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 App.xaml create mode 100644 App.xaml.cs create mode 100644 Assets/icons/app.ico create mode 100644 Assets/icons/icon.png create mode 100644 Assets/icons/titlebar.ico create mode 100644 Usings.cs create mode 100644 Views/MainWindow.xaml create mode 100644 Views/MainWindow.xaml.cs create mode 100644 WinUI.csproj create mode 100644 app.manifest diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f8730bc --- /dev/null +++ b/.editorconfig @@ -0,0 +1,398 @@ +root = true + +# Workaround for https://github.com/microsoft/microsoft-ui-xaml/issues/10855 +[XamlTypeInfo.g.cs] +dotnet_diagnostic.CS0612.severity = none +dotnet_diagnostic.CS0618.severity = none + +# All files +[*] +indent_style = space +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# Xml files +[*.xml] +indent_size = 2 + +# Xml project files +[*.{csproj,fsproj,vbproj,proj,slnx}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +[*.json] +indent_size = 2 + +# C# files +[*.cs] + +#### Core EditorConfig Options #### + +# Indentation and spacing +indent_size = 4 +tab_width = 4 + +# New line preferences +insert_final_newline = false + +#### .NET Coding Conventions #### +[*.{cs,vb}] + +# Organize usings +dotnet_separate_import_directive_groups = true +dotnet_sort_system_directives_first = true +file_header_template = unset + +# this. and Me. preferences +dotnet_style_qualification_for_event = false:silent +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_property = false:silent + +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent + +# Parentheses preferences +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_other_operators = never_if_unnecessary:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent + +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent + +# Expression-level preferences +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_namespace_match_folder = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_object_initializer = true:suggestion +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_prefer_auto_properties = true:suggestion +dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_return = true:suggestion +dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion + +# Field preferences +dotnet_style_readonly_field = true:warning + +# Parameter preferences +dotnet_code_quality_unused_parameters = all:suggestion + +# Suppression preferences +dotnet_remove_unnecessary_suppression_exclusions = none + +#### C# Coding Conventions #### +[*.cs] + +# var preferences +csharp_style_var_elsewhere = false:silent +csharp_style_var_for_built_in_types = false:silent +csharp_style_var_when_type_is_apparent = false:silent + +# Expression-bodied members +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_lambdas = true:suggestion +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent + +# Pattern matching preferences +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_switch_expression = true:suggestion + +# Null-checking preferences +csharp_style_conditional_delegate_call = true:suggestion + +# Modifier preferences +csharp_prefer_static_anonymous_function = true:suggestion +csharp_prefer_static_local_function = true:warning +csharp_preferred_modifier_order = public,private,protected,internal,file,const,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion +csharp_style_prefer_readonly_struct = true:suggestion +csharp_style_prefer_readonly_struct_member = true:suggestion + +# Code-block preferences +csharp_prefer_braces = true:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_style_namespace_declarations = file_scoped:suggestion +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_primary_constructors = true:suggestion +csharp_style_prefer_top_level_statements = true:silent + +# Expression-level preferences +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent + +# 'using' directive preferences +csharp_using_directive_placement = outside_namespace:silent + +#### C# Formatting Rules #### + +# New line preferences +csharp_new_line_before_catch = true +csharp_new_line_before_else = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_open_brace = all +csharp_new_line_between_query_expression_clauses = true + +# Indentation preferences +csharp_indent_block_contents = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true +csharp_indent_labels = one_less_than_current +csharp_indent_switch_labels = true + +# Space preferences +csharp_space_after_cast = false +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_after_comma = true +csharp_space_after_dot = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_after_semicolon_in_for_statement = true +csharp_space_around_binary_operators = before_and_after +csharp_space_around_declaration_statements = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_before_comma = false +csharp_space_before_dot = false +csharp_space_before_open_square_brackets = false +csharp_space_before_semicolon_in_for_statement = false +csharp_space_between_empty_square_brackets = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_declaration_name_and_open_parenthesis = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_between_square_brackets = false + +# Wrapping preferences +csharp_preserve_single_line_blocks = true +csharp_preserve_single_line_statements = true + +#### Naming styles #### +[*.{cs,vb}] + +# Naming rules + +dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.symbols = types_and_namespaces +dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.interfaces_should_be_ipascalcase.severity = suggestion +dotnet_naming_rule.interfaces_should_be_ipascalcase.symbols = interfaces +dotnet_naming_rule.interfaces_should_be_ipascalcase.style = ipascalcase + +dotnet_naming_rule.type_parameters_should_be_tpascalcase.severity = suggestion +dotnet_naming_rule.type_parameters_should_be_tpascalcase.symbols = type_parameters +dotnet_naming_rule.type_parameters_should_be_tpascalcase.style = tpascalcase + +dotnet_naming_rule.methods_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.methods_should_be_pascalcase.symbols = methods +dotnet_naming_rule.methods_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.properties_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.properties_should_be_pascalcase.symbols = properties +dotnet_naming_rule.properties_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.events_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.events_should_be_pascalcase.symbols = events +dotnet_naming_rule.events_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.local_variables_should_be_camelcase.severity = suggestion +dotnet_naming_rule.local_variables_should_be_camelcase.symbols = local_variables +dotnet_naming_rule.local_variables_should_be_camelcase.style = camelcase + +dotnet_naming_rule.local_constants_should_be_camelcase.severity = suggestion +dotnet_naming_rule.local_constants_should_be_camelcase.symbols = local_constants +dotnet_naming_rule.local_constants_should_be_camelcase.style = camelcase + +dotnet_naming_rule.parameters_should_be_camelcase.severity = suggestion +dotnet_naming_rule.parameters_should_be_camelcase.symbols = parameters +dotnet_naming_rule.parameters_should_be_camelcase.style = camelcase + +dotnet_naming_rule.public_fields_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.public_fields_should_be_pascalcase.symbols = public_fields +dotnet_naming_rule.public_fields_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.private_fields_should_be__camelcase.severity = suggestion +dotnet_naming_rule.private_fields_should_be__camelcase.symbols = private_fields +dotnet_naming_rule.private_fields_should_be__camelcase.style = _camelcase + +dotnet_naming_rule.private_static_fields_should_be_s_camelcase.severity = suggestion +dotnet_naming_rule.private_static_fields_should_be_s_camelcase.symbols = private_static_fields +dotnet_naming_rule.private_static_fields_should_be_s_camelcase.style = s_camelcase + +dotnet_naming_rule.public_constant_fields_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.public_constant_fields_should_be_pascalcase.symbols = public_constant_fields +dotnet_naming_rule.public_constant_fields_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.private_constant_fields_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.private_constant_fields_should_be_pascalcase.symbols = private_constant_fields +dotnet_naming_rule.private_constant_fields_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.symbols = public_static_readonly_fields +dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.symbols = private_static_readonly_fields +dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.enums_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.enums_should_be_pascalcase.symbols = enums +dotnet_naming_rule.enums_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.local_functions_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.local_functions_should_be_pascalcase.symbols = local_functions +dotnet_naming_rule.local_functions_should_be_pascalcase.style = pascalcase + +dotnet_naming_rule.non_field_members_should_be_pascalcase.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascalcase.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascalcase.style = pascalcase + +# Symbol specifications + +dotnet_naming_symbols.interfaces.applicable_kinds = interface +dotnet_naming_symbols.interfaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interfaces.required_modifiers = + +dotnet_naming_symbols.enums.applicable_kinds = enum +dotnet_naming_symbols.enums.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.enums.required_modifiers = + +dotnet_naming_symbols.events.applicable_kinds = event +dotnet_naming_symbols.events.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.events.required_modifiers = + +dotnet_naming_symbols.methods.applicable_kinds = method +dotnet_naming_symbols.methods.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.methods.required_modifiers = + +dotnet_naming_symbols.properties.applicable_kinds = property +dotnet_naming_symbols.properties.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.properties.required_modifiers = + +dotnet_naming_symbols.public_fields.applicable_kinds = field +dotnet_naming_symbols.public_fields.applicable_accessibilities = public, internal +dotnet_naming_symbols.public_fields.required_modifiers = + +dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_naming_symbols.private_fields.applicable_accessibilities = private, protected, protected_internal, private_protected +dotnet_naming_symbols.private_fields.required_modifiers = + +dotnet_naming_symbols.private_static_fields.applicable_kinds = field +dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private, protected, protected_internal, private_protected +dotnet_naming_symbols.private_static_fields.required_modifiers = static + +dotnet_naming_symbols.types_and_namespaces.applicable_kinds = namespace, class, struct, interface, enum +dotnet_naming_symbols.types_and_namespaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types_and_namespaces.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +dotnet_naming_symbols.type_parameters.applicable_kinds = namespace +dotnet_naming_symbols.type_parameters.applicable_accessibilities = * +dotnet_naming_symbols.type_parameters.required_modifiers = + +dotnet_naming_symbols.private_constant_fields.applicable_kinds = field +dotnet_naming_symbols.private_constant_fields.applicable_accessibilities = private, protected, protected_internal, private_protected +dotnet_naming_symbols.private_constant_fields.required_modifiers = const + +dotnet_naming_symbols.local_variables.applicable_kinds = local +dotnet_naming_symbols.local_variables.applicable_accessibilities = local +dotnet_naming_symbols.local_variables.required_modifiers = + +dotnet_naming_symbols.local_constants.applicable_kinds = local +dotnet_naming_symbols.local_constants.applicable_accessibilities = local +dotnet_naming_symbols.local_constants.required_modifiers = const + +dotnet_naming_symbols.parameters.applicable_kinds = parameter +dotnet_naming_symbols.parameters.applicable_accessibilities = * +dotnet_naming_symbols.parameters.required_modifiers = + +dotnet_naming_symbols.public_constant_fields.applicable_kinds = field +dotnet_naming_symbols.public_constant_fields.applicable_accessibilities = public, internal +dotnet_naming_symbols.public_constant_fields.required_modifiers = const + +dotnet_naming_symbols.public_static_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.public_static_readonly_fields.applicable_accessibilities = public, internal +dotnet_naming_symbols.public_static_readonly_fields.required_modifiers = readonly, static + +dotnet_naming_symbols.private_static_readonly_fields.applicable_kinds = field +dotnet_naming_symbols.private_static_readonly_fields.applicable_accessibilities = private, protected, protected_internal, private_protected +dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = readonly, static + +dotnet_naming_symbols.local_functions.applicable_kinds = local_function +dotnet_naming_symbols.local_functions.applicable_accessibilities = * +dotnet_naming_symbols.local_functions.required_modifiers = + +# Naming styles + +dotnet_naming_style.pascalcase.required_prefix = +dotnet_naming_style.pascalcase.required_suffix = +dotnet_naming_style.pascalcase.word_separator = +dotnet_naming_style.pascalcase.capitalization = pascal_case + +dotnet_naming_style.ipascalcase.required_prefix = I +dotnet_naming_style.ipascalcase.required_suffix = +dotnet_naming_style.ipascalcase.word_separator = +dotnet_naming_style.ipascalcase.capitalization = pascal_case + +dotnet_naming_style.tpascalcase.required_prefix = T +dotnet_naming_style.tpascalcase.required_suffix = +dotnet_naming_style.tpascalcase.word_separator = +dotnet_naming_style.tpascalcase.capitalization = pascal_case + +dotnet_naming_style._camelcase.required_prefix = _ +dotnet_naming_style._camelcase.required_suffix = +dotnet_naming_style._camelcase.word_separator = +dotnet_naming_style._camelcase.capitalization = camel_case + +dotnet_naming_style.camelcase.required_prefix = +dotnet_naming_style.camelcase.required_suffix = +dotnet_naming_style.camelcase.word_separator = +dotnet_naming_style.camelcase.capitalization = camel_case + +dotnet_naming_style.s_camelcase.required_prefix = s_ +dotnet_naming_style.s_camelcase.required_suffix = +dotnet_naming_style.s_camelcase.word_separator = +dotnet_naming_style.s_camelcase.capitalization = camel_case + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0808c4a --- /dev/null +++ b/.gitignore @@ -0,0 +1,482 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from `dotnet new gitignore` + +# dotenv files +.env + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +# but not Directory.Build.rsp, as it configures directory-level build defaults +!Directory.Build.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml +.idea/ + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# content below from: https://github.com/github/gitignore/blob/main/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/main/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim temporary swap files +*.swp diff --git a/App.xaml b/App.xaml new file mode 100644 index 0000000..160d15d --- /dev/null +++ b/App.xaml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/App.xaml.cs b/App.xaml.cs new file mode 100644 index 0000000..deb66de --- /dev/null +++ b/App.xaml.cs @@ -0,0 +1,18 @@ +namespace MyApp; + +using MyApp.Views; +public partial class App +{ + private Window? window; + + public App() + { + this.InitializeComponent(); + } + + protected override void OnLaunched(LaunchActivatedEventArgs args) + { + window = new MainWindow(); + window.Activate(); + } +} diff --git a/Assets/icons/app.ico b/Assets/icons/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..04c1baeed094bd52758ba60bf505f6ce5d63744d GIT binary patch literal 17014 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 Li)RZ|%>DlbKqYUz literal 0 HcmV?d00001 diff --git a/Assets/icons/titlebar.ico b/Assets/icons/titlebar.ico new file mode 100644 index 0000000000000000000000000000000000000000..04c1baeed094bd52758ba60bf505f6ce5d63744d GIT binary patch literal 17014 zcmeI3X;4$=8ppX`I{ng_e!4UFc2RKwv4xDb-STq~*0pA)vs{D0?N zp7;M8+}!?w|NZ>j@Z(^&Fn>3+GK&cX8ySsjSM&psn0*EUA_n zimO@-nyRP9;woU$;FYNouc#s`sr6v6R-q0I)>7f;stQg8cokF*2Bnqq%fMi*Jp4Sb z6gqh2;%lZ7XqRiBb|^}k+vO$Fc6sqWQ(l>uBVMh4)>u+A2|deDVANWv7+>@L>G~IA zfd0WEEwszDvL}k7N!H$My@u-QR}5t}#|$Oa&yWEKdYKu>wa<`4e05^tE4IA1)z!Ub zD6Ppgmezu?)XF>0;U#9!A;+;GFIKdrs$T1k0o`{~S*-$v-gym72HlMVQ(4_H^3H2O zGmsU>TaN*wu3?g~tnL{y5d071ae(vSnL$=Ek!N5mualX|(L2d?7)Z(glk)13f_E2V z@Fb_m%cQH{XR4^@?mh3{MaBWEkt*t?%)bjVpgPf5QQso?cRdEpMqT|=oCDyB4CuUI z(lr1l*JNPvPaIs2fl1HbfBx!P44D6ZWT4*_56Of5K{_K8{=_pnot>Y^G$5T80x9k@ zp(g5-<@{{N*_nP(}Ak94h8c$xbWG9#(s1|-IFi0IT6CPzK?PhTM_(e!_7c(dh-;3FqIaBMy zTwwm4Wq{{pT|^9I4iALuL+3IE86yJW&QDj(8G}(Q@b4%CJSXZl$G{Db1&}pjK4XyOwE&vVCbKhiclm*4#SX@a z<^qlB))cuz4DSAz2$Es5MGVv-JE4PeR3{mjs&0X!3@|GI{U^~N9k~dyy%sVC*`pT& z&2v6K=`KHLO_oEJN07ikz2b8&TXkR@G@VWY$?!QM28AoPLq`E-#!fKkB>xUDFqYSX zeq%JqM=t@{s9?rG=Ccf%FJ8ARKPdfp9~&?Hd}+CI!(j&ZaEwVt%oQ;xShm$E2ISvf z26W#mH$+38_i|8-S;iRTj$Z{Wmv4yA&o(j?TK95BEfN?ME{?S1>kf>A`{z?3-6K%M zKpDIRI+WNSa9|wp{(EJBwQ&`CSB_l``R}e|43zJ!fz~7`cXqPQ4tmKCbep0f+ml;2 zXdK+XAaRPp1N^;o&v_yS`HLbPS`#~~8`=HmIrKCaS`%}iaKaiW821rlP%tqB{zy?c zb#83SQG?ujslcFM{$`7R%Gezk2hG1{fMlq6O>8=I&F=bu`L~0?lN=2cOxBEPG571fo^LYtE*C|?!x+#>MmMm?d`P*{_SAUd`|K|4C?os6psNr zGn7AbOCS%|4z`CN17*Mlv41;vY*LS2fz*;@j2O|IWFgTw9 zMN`D%pl;W3rx?`jIRWx_mIw^)oV?7{jCS;y^ji*NJrxKUL+3CC=~!D)o#<%KwX+82 zKl!$nc~9tRO>Frs6B(=%&4t<>-#N^n9s9fmQ^EuWO8;=c9z^j*i;bzon z$i@AX9|w)`zgf-=UB?0T*!5U*=1|?`Np)8cWRLm~nto1ly7$iccap*7Y|u; zt<$|OTd+-FaQ8UoC-@8ot+VQhp^SmrHym28N-cGQ19f6g3_9z`fB!LP%PfTYFOI{# zQ%Pp;_UFpGpJU6_I3-$faS{JS87&IX+SU!@qEf#VejaNH=57S`>}1qt8GC>Fd*+@a)kU@w^z$MQ_dGz&1-rEFJ;=P){pQN~N>jXa+f znDwq;=Z@Sl%OMwYZ_2(EqwyRzdI>v=$=?YE841s&QWBoeNjY90nzfLf*D3R*ei5D9 zZ;asb3$AxG5Bot=Ly)!u*diz!dC1 zlUNprdEm7-r?Y4Ei8nGj)9wH(J(z zuT=q$QgeZNq1Jn2&Gz^nf1cilGA!AcB`=gg%FuwQ;=o8B^~5liG4;gY;U(;EV-{me zDXLwhzieIhBU)g_6}@g2LSUd_i^M^YqaReL45s zN6obL37mi1b73IV%97!86Rf?{>)g--uWH^8R}FLq_^gB~cY5fnUH#MN6$>L@AIJ3ybKJkdju-8 z#s-VlI%}W3y)K`()tl8wR3}oc{8v6Nc+7vE + + + + + + + + + + + + + + + + + diff --git a/Views/MainWindow.xaml.cs b/Views/MainWindow.xaml.cs new file mode 100644 index 0000000..257e610 --- /dev/null +++ b/Views/MainWindow.xaml.cs @@ -0,0 +1,13 @@ +namespace MyApp.Views; + +using WinUIEx; +public sealed partial class MainWindow : WindowEx +{ + public MainWindow() + { + InitializeComponent(); + this.SetIcon("Assets/icons/titlebar.ico"); + ExtendsContentIntoTitleBar = true; + SetTitleBar(AppTitleBar); + } +} \ No newline at end of file diff --git a/WinUI.csproj b/WinUI.csproj new file mode 100644 index 0000000..65c774d --- /dev/null +++ b/WinUI.csproj @@ -0,0 +1,58 @@ + + + WinExe + net10.0-windows10.0.26100.0 + 10.0.19041.0 + x64 + MyApp + true + true + + MyWinUIApp + 0.0.1-alpha + Assets\icons\app.ico + app.manifest + zh,en + + enable + false + false + false + False + + + + None + $(TargetPlatformMinVersion) + none + true + publish\$(AssemblyName)-x64-v$(Version) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app.manifest b/app.manifest new file mode 100644 index 0000000..302a0f7 --- /dev/null +++ b/app.manifest @@ -0,0 +1,17 @@ + + + + + + + + + + + + PerMonitorV2 + + + \ No newline at end of file