diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4b4120db5..1426623d7 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,4 +16,10 @@ updates: commit-message: prefix: 'nuget-deps: ' + - package-ecosystem: "nuget" + # location of package manifests + directory: "/src/Notepad" + schedule: + interval: "daily" + # Built with ❤ by [Pipeline Foundation](https://pipeline.foundation) \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1d6a6e1f7..a65178e39 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -120,6 +120,10 @@ jobs: id: setup_msbuild uses: microsoft/setup-msbuild@v1 + - name: Setup NuGet + id: setup-nuget + uses: NuGet/setup-nuget@v1.0.5 + - name: Checkout repository id: checkout_repo uses: actions/checkout@v2 @@ -233,6 +237,7 @@ jobs: shell: pwsh run: | msbuild $env:SOLUTION_NAME /t:Restore + nuget restore $env:SOLUTION_NAME - if: matrix.runCodeqlAnalysis name: Initialize CodeQL diff --git a/src/Notepad/AssemblyInfo.rc b/src/Notepad/AssemblyInfo.rc new file mode 100644 index 000000000..3eb473c3c --- /dev/null +++ b/src/Notepad/AssemblyInfo.rc @@ -0,0 +1,68 @@ +// Microsoft Visual C++ generated resource script. +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "Jackie Liu" + VALUE "FileDescription", "Notepads" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "Notepad.exe" + VALUE "LegalCopyright", "Copyright 2020 Jackie Liu" + VALUE "OriginalFilename", "Notepad.exe" + VALUE "ProductName", "Notepads" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/src/Notepad/Notepad.vcxproj b/src/Notepad/Notepad.vcxproj new file mode 100644 index 000000000..b9fa6dd83 --- /dev/null +++ b/src/Notepad/Notepad.vcxproj @@ -0,0 +1,300 @@ + + + + + 15.0 + {0f39c2eb-f8c6-473e-b26a-0714385798f5} + Win32Proj + Notepad + obj\ + $(BaseIntermediateOutputPath)$(Platform)\$(Configuration)\ + $(ProjectDir)bin\$(Platform)\$(Configuration)\ + true + true + true + true + $(BaseIntermediateOutputPath)Generated Files\ + 10.0.19041.0 + 10.0.17134.0 + true + false + false + Windows Store + 10.0 + + + + + Debug + ARM + + + Release + ARM + + + Production + ARM + + + Debug + ARM64 + + + Release + ARM64 + + + Production + ARM64 + + + Debug + Win32 + + + Release + Win32 + + + Production + Win32 + + + Debug + x64 + + + Release + x64 + + + Production + x64 + + + + + _PRODUCTION;%(PreprocessorDefinitions) + + + + Application + v140 + v141 + v142 + Unicode + + + true + true + + + false + true + false + + + + + + + + + + + + + stdcpplatest + NotUsing + _CONSOLE;WIN32_LEAN_AND_MEAN;WINRT_LEAN_AND_MEAN;%(PreprocessorDefinitions) + Level4 + %(AdditionalOptions) /permissive- /bigobj /FS + + + + + Disabled + _DEBUG;%(PreprocessorDefinitions) + + + Console + false + + + + + WIN32;%(PreprocessorDefinitions) + + + + + MaxSpeed + true + true + NDEBUG;%(PreprocessorDefinitions) + + + Windows + true + true + false + + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + + + + + + + + + + + + + + + + + + + 19282JackieLiu.Notepads-Beta_echhpq9pdbte8!App + Notepads-Dev_echhpq9pdbte8!App + +#pragma once +#define AUMID L"$(ApplicationUserModeId)" + + + + + \ No newline at end of file diff --git a/src/Notepad/main.cpp b/src/Notepad/main.cpp new file mode 100644 index 000000000..f3dc87ae3 --- /dev/null +++ b/src/Notepad/main.cpp @@ -0,0 +1,76 @@ +#pragma once +#pragma comment(lib, "shell32") +#define STRICT +#define STRICT_TYPED_ITEMIDS +#include "windows.h" +#include "shellapi.h" +#include "shlobj_core.h" +#include "winrt/base.h" +#include "constants.h" + +#define OPEN L"open" +#define PRINT L"print" + +#define NOTEPAD_PRINT_COMMAND L"/p" +#define NOTEPAD_OPEN_WITH_ANSI_ENCODING_COMMAND L"/a" +#define NOTEPAD_OPEN_WITH_UTF16_ENCODING_COMMAND L"/w" + +namespace winrt +{ + template + impl::com_ref parse(F function, Args&& ...args) + { + T* result{}; + check_hresult(function(args..., &result)); + return { result, take_ownership_from_abi }; + } +} + +using namespace winrt; + +#ifndef _DEBUG +INT APIENTRY wWinMain( + _In_ HINSTANCE /* hInstance */, + _In_opt_ HINSTANCE /* hPrevInstance */, + _In_ LPWSTR /* lpCmdLine */, + _In_ INT /* nCmdShow */) +#else +INT main() +#endif +{ + init_apartment(); + + auto nArgs = 0; + auto args = CommandLineToArgvW(GetCommandLine(), &nArgs); + if (nArgs > 1) + { + auto nIgnore = 1; + auto verb = OPEN; + if (wcscmp(NOTEPAD_PRINT_COMMAND, args[1]) == 0) + { + nIgnore = 2; + verb = PRINT; + } + + auto rgpidl = com_array(nArgs - nIgnore); + for (auto ppidl = rgpidl.begin(); ppidl < rgpidl.end(); ppidl++, nArgs--) + { + SHParseDisplayName(args[nArgs - 1], NULL, ppidl, 0, NULL); + } + + if (rgpidl.size() <= 0) goto CleanUp; + + auto pid = 0UL; + auto ppsia = parse(SHCreateShellItemArrayFromIDLists, rgpidl.size(), rgpidl.data()); + auto appActivationMgr = create_instance(CLSID_ApplicationActivationManager); + appActivationMgr->ActivateForFile(AUMID, ppsia.get(), verb, &pid); +#ifdef _DEBUG + printf("Launched files with process id: %d", pid); + Sleep(2000); +#endif + } + +CleanUp: + LocalFree(args); + uninit_apartment(); +} \ No newline at end of file diff --git a/src/Notepad/packages.config b/src/Notepad/packages.config new file mode 100644 index 000000000..14af43910 --- /dev/null +++ b/src/Notepad/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/Notepad/packages.targets b/src/Notepad/packages.targets new file mode 100644 index 000000000..c4cf7eab3 --- /dev/null +++ b/src/Notepad/packages.targets @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Notepads.Controls/Notepads.Controls.csproj b/src/Notepads.Controls/Notepads.Controls.csproj index 29c6bc709..9865d3ac6 100644 --- a/src/Notepads.Controls/Notepads.Controls.csproj +++ b/src/Notepads.Controls/Notepads.Controls.csproj @@ -3,7 +3,7 @@ Debug - AnyCPU + x86 {7AA5E631-B663-420E-A08F-002CD81DF855} Library Properties @@ -17,34 +17,6 @@ 512 {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Production\ - TRACE;NETFX_CORE;WINDOWS_UWP - prompt - 4 - x86 true diff --git a/src/Notepads.sln b/src/Notepads.sln index fad9f03e9..a90fe1f75 100644 --- a/src/Notepads.sln +++ b/src/Notepads.sln @@ -15,19 +15,27 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Notepad", "Notepad\Notepad.vcxproj", "{0F39C2EB-F8C6-473E-B26A-0714385798F5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Release|ARM64 = Release|ARM64 - Release|x64 = Release|x64 - Release|x86 = Release|x86 + Production|ARM = Production|ARM Production|ARM64 = Production|ARM64 Production|x64 = Production|x64 Production|x86 = Production|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {99274932-9E86-480C-8142-38525F80007D}.Debug|ARM.ActiveCfg = Debug|ARM + {99274932-9E86-480C-8142-38525F80007D}.Debug|ARM.Build.0 = Debug|ARM + {99274932-9E86-480C-8142-38525F80007D}.Debug|ARM.Deploy.0 = Debug|ARM {99274932-9E86-480C-8142-38525F80007D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {99274932-9E86-480C-8142-38525F80007D}.Debug|ARM64.Build.0 = Debug|ARM64 {99274932-9E86-480C-8142-38525F80007D}.Debug|ARM64.Deploy.0 = Debug|ARM64 @@ -37,15 +45,9 @@ Global {99274932-9E86-480C-8142-38525F80007D}.Debug|x86.ActiveCfg = Debug|x86 {99274932-9E86-480C-8142-38525F80007D}.Debug|x86.Build.0 = Debug|x86 {99274932-9E86-480C-8142-38525F80007D}.Debug|x86.Deploy.0 = Debug|x86 - {99274932-9E86-480C-8142-38525F80007D}.Release|ARM64.ActiveCfg = Release|ARM64 - {99274932-9E86-480C-8142-38525F80007D}.Release|ARM64.Build.0 = Release|ARM64 - {99274932-9E86-480C-8142-38525F80007D}.Release|ARM64.Deploy.0 = Release|ARM64 - {99274932-9E86-480C-8142-38525F80007D}.Release|x64.ActiveCfg = Release|x64 - {99274932-9E86-480C-8142-38525F80007D}.Release|x64.Build.0 = Release|x64 - {99274932-9E86-480C-8142-38525F80007D}.Release|x64.Deploy.0 = Release|x64 - {99274932-9E86-480C-8142-38525F80007D}.Release|x86.ActiveCfg = Release|x86 - {99274932-9E86-480C-8142-38525F80007D}.Release|x86.Build.0 = Release|x86 - {99274932-9E86-480C-8142-38525F80007D}.Release|x86.Deploy.0 = Release|x86 + {99274932-9E86-480C-8142-38525F80007D}.Production|ARM.ActiveCfg = Production|ARM + {99274932-9E86-480C-8142-38525F80007D}.Production|ARM.Build.0 = Production|ARM + {99274932-9E86-480C-8142-38525F80007D}.Production|ARM.Deploy.0 = Production|ARM {99274932-9E86-480C-8142-38525F80007D}.Production|ARM64.ActiveCfg = Production|ARM64 {99274932-9E86-480C-8142-38525F80007D}.Production|ARM64.Build.0 = Production|ARM64 {99274932-9E86-480C-8142-38525F80007D}.Production|ARM64.Deploy.0 = Production|ARM64 @@ -55,24 +57,66 @@ Global {99274932-9E86-480C-8142-38525F80007D}.Production|x86.ActiveCfg = Production|x86 {99274932-9E86-480C-8142-38525F80007D}.Production|x86.Build.0 = Production|x86 {99274932-9E86-480C-8142-38525F80007D}.Production|x86.Deploy.0 = Production|x86 + {99274932-9E86-480C-8142-38525F80007D}.Release|ARM.ActiveCfg = Release|ARM + {99274932-9E86-480C-8142-38525F80007D}.Release|ARM.Build.0 = Release|ARM + {99274932-9E86-480C-8142-38525F80007D}.Release|ARM.Deploy.0 = Release|ARM + {99274932-9E86-480C-8142-38525F80007D}.Release|ARM64.ActiveCfg = Release|ARM64 + {99274932-9E86-480C-8142-38525F80007D}.Release|ARM64.Build.0 = Release|ARM64 + {99274932-9E86-480C-8142-38525F80007D}.Release|ARM64.Deploy.0 = Release|ARM64 + {99274932-9E86-480C-8142-38525F80007D}.Release|x64.ActiveCfg = Release|x64 + {99274932-9E86-480C-8142-38525F80007D}.Release|x64.Build.0 = Release|x64 + {99274932-9E86-480C-8142-38525F80007D}.Release|x64.Deploy.0 = Release|x64 + {99274932-9E86-480C-8142-38525F80007D}.Release|x86.ActiveCfg = Release|x86 + {99274932-9E86-480C-8142-38525F80007D}.Release|x86.Build.0 = Release|x86 + {99274932-9E86-480C-8142-38525F80007D}.Release|x86.Deploy.0 = Release|x86 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|ARM.ActiveCfg = Debug|ARM + {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|ARM.Build.0 = Debug|ARM {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|ARM64.ActiveCfg = Debug|ARM64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|ARM64.Build.0 = Debug|ARM64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|x64.ActiveCfg = Debug|x64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|x64.Build.0 = Debug|x64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|x86.ActiveCfg = Debug|x86 {7AA5E631-B663-420E-A08F-002CD81DF855}.Debug|x86.Build.0 = Debug|x86 - {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|ARM64.ActiveCfg = Release|ARM64 - {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|ARM64.Build.0 = Release|ARM64 - {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x64.ActiveCfg = Release|x64 - {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x64.Build.0 = Release|x64 - {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x86.ActiveCfg = Release|x86 - {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x86.Build.0 = Release|x86 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|ARM.ActiveCfg = Production|ARM + {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|ARM.Build.0 = Production|ARM {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|ARM64.ActiveCfg = Production|ARM64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|ARM64.Build.0 = Production|ARM64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|x64.ActiveCfg = Production|x64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|x64.Build.0 = Production|x64 {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|x86.ActiveCfg = Production|x86 {7AA5E631-B663-420E-A08F-002CD81DF855}.Production|x86.Build.0 = Production|x86 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|ARM.ActiveCfg = Release|ARM + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|ARM.Build.0 = Release|ARM + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|ARM64.ActiveCfg = Release|ARM64 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|ARM64.Build.0 = Release|ARM64 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x64.ActiveCfg = Release|x64 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x64.Build.0 = Release|x64 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x86.ActiveCfg = Release|x86 + {7AA5E631-B663-420E-A08F-002CD81DF855}.Release|x86.Build.0 = Release|x86 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|ARM.ActiveCfg = Debug|ARM + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|ARM.Build.0 = Debug|ARM + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|ARM64.Build.0 = Debug|ARM64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|x64.ActiveCfg = Debug|x64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|x64.Build.0 = Debug|x64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|x86.ActiveCfg = Debug|Win32 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Debug|x86.Build.0 = Debug|Win32 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|ARM.ActiveCfg = Production|ARM + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|ARM.Build.0 = Production|ARM + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|ARM64.ActiveCfg = Production|ARM64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|ARM64.Build.0 = Production|ARM64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|x64.ActiveCfg = Production|x64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|x64.Build.0 = Production|x64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|x86.ActiveCfg = Production|Win32 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Production|x86.Build.0 = Production|Win32 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|ARM.ActiveCfg = Release|ARM + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|ARM.Build.0 = Release|ARM + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|ARM64.ActiveCfg = Release|ARM64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|ARM64.Build.0 = Release|ARM64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|x64.ActiveCfg = Release|x64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|x64.Build.0 = Release|x64 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|x86.ActiveCfg = Release|Win32 + {0F39C2EB-F8C6-473E-B26A-0714385798F5}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Notepads/Notepads.csproj b/src/Notepads/Notepads.csproj index 279ad618a..d93370095 100644 --- a/src/Notepads/Notepads.csproj +++ b/src/Notepads/Notepads.csproj @@ -99,6 +99,42 @@ true true + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN + ;2008 + full + ARM + false + prompt + true + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + bin\ARM\Production\ + TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN + true + ;2008 + pdbonly + ARM + false + prompt + true + true + true bin\x64\Debug\ @@ -462,7 +498,19 @@ - Scale|DXFeatureLevel - + @@ -32,7 +32,7 @@ - + diff --git a/src/Notepads/Strings/en-US/Settings.resw b/src/Notepads/Strings/en-US/Settings.resw index fa358b94f..e3aab75bf 100644 --- a/src/Notepads/Strings/en-US/Settings.resw +++ b/src/Notepads/Strings/en-US/Settings.resw @@ -421,4 +421,16 @@ System Default AdvancedPage LanguagePreferenceSettings System Default option text. + + Copy File + AboutPage Desktop Activation component file copy button text. + + + Copy path + AboutPage Desktop Activation component path copy button text. + + + Use desktop component to broker file activation with Notepads + AboutPage Desktop Activation description text. + \ No newline at end of file diff --git a/src/Notepads/Views/Settings/AboutPage.xaml b/src/Notepads/Views/Settings/AboutPage.xaml index a051b084e..0f5445cd5 100644 --- a/src/Notepads/Views/Settings/AboutPage.xaml +++ b/src/Notepads/Views/Settings/AboutPage.xaml @@ -4,13 +4,13 @@ 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" - mc:Ignorable="d" - Background="{ThemeResource SystemControlForegroundTransparentBrush}"> + Background="{ThemeResource SystemControlForegroundTransparentBrush}" + mc:Ignorable="d"> - + @@ -24,28 +24,59 @@ UseSystemFocusVisuals="False" VerticalScrollBarVisibility="Auto" VerticalScrollMode="Auto"> - - - + + + - + + + + + + + +