From a5b214b079f4c22898e9087da1a452b740a8590f Mon Sep 17 00:00:00 2001 From: Thomas Ibel <tibel@users.noreply.github.com> Date: Sun, 8 Mar 2015 18:42:12 +0100 Subject: [PATCH] add new WeakEventHandler that uses NO reflection --- README.md | 6 +- Weakly.sln | 82 +- build/Weakly.nuspec | 6 +- samples/Demo.Library/Demo.Library.csproj | 52 - .../Demo.Library/Properties/AssemblyInfo.cs | 30 - samples/Demo.Library/TestMethods.cs | 55 - samples/Demo.Library/TestRunner.cs | 22 - samples/Demo.Phone/App.xaml | 20 - samples/Demo.Phone/App.xaml.cs | 223 -- samples/Demo.Phone/Assets/AlignmentGrid.png | Bin 9042 -> 0 bytes samples/Demo.Phone/Assets/ApplicationIcon.png | Bin 3392 -> 0 bytes .../Assets/Tiles/FlipCycleTileLarge.png | Bin 9930 -> 0 bytes .../Assets/Tiles/FlipCycleTileMedium.png | Bin 9070 -> 0 bytes .../Assets/Tiles/FlipCycleTileSmall.png | Bin 3674 -> 0 bytes .../Assets/Tiles/IconicTileMediumLarge.png | Bin 4937 -> 0 bytes .../Assets/Tiles/IconicTileSmall.png | Bin 3724 -> 0 bytes samples/Demo.Phone/Demo.Phone.csproj | 170 -- samples/Demo.Phone/LocalizedStrings.cs | 14 - samples/Demo.Phone/MainPage.xaml | 72 - samples/Demo.Phone/MainPage.xaml.cs | 117 -- samples/Demo.Phone/Properties/AppManifest.xml | 6 - samples/Demo.Phone/Properties/AssemblyInfo.cs | 37 - .../Demo.Phone/Properties/WMAppManifest.xml | 38 - .../Resources/AppResources.Designer.cs | 127 -- .../Demo.Phone/Resources/AppResources.resx | 137 -- samples/Demo.Win81/App.xaml | 20 - samples/Demo.Win81/App.xaml.cs | 78 - samples/Demo.Win81/Assets/Logo.png | Bin 801 -> 0 bytes samples/Demo.Win81/Assets/SmallLogo.png | Bin 329 -> 0 bytes samples/Demo.Win81/Assets/SplashScreen.png | Bin 2146 -> 0 bytes samples/Demo.Win81/Assets/StoreLogo.png | Bin 429 -> 0 bytes samples/Demo.Win81/Common/StandardStyles.xaml | 1829 ----------------- samples/Demo.Win81/Demo.Win81.csproj | 163 -- .../Demo.Win81/Demo.Win81_TemporaryKey.pfx | Bin 2512 -> 0 bytes samples/Demo.Win81/MainPage.xaml | 22 - samples/Demo.Win81/MainPage.xaml.cs | 106 - samples/Demo.Win81/Package.appxmanifest | 31 - samples/Demo.Win81/Properties/AssemblyInfo.cs | 29 - samples/Demo.Wpf/App.config | 6 - samples/Demo.Wpf/App.xaml | 8 - samples/Demo.Wpf/App.xaml.cs | 11 - samples/Demo.Wpf/Demo.Wpf.csproj | 114 - samples/Demo.Wpf/MainWindow.xaml | 8 - samples/Demo.Wpf/MainWindow.xaml.cs | 15 - samples/Demo.Wpf/Properties/AssemblyInfo.cs | 55 - .../Demo.Wpf/Properties/Resources.Designer.cs | 71 - samples/Demo.Wpf/Properties/Resources.resx | 117 -- .../Demo.Wpf/Properties/Settings.Designer.cs | 30 - samples/Demo.Wpf/Properties/Settings.settings | 7 - src/GlobalAssemblyInfo.cs | 6 +- src/Weakly/Delegates/DynamicDelegate.cs | 23 - src/Weakly/Delegates/DynamicEvent.cs | 32 - src/Weakly/Delegates/DynamicProperty.cs | 33 - src/Weakly/Delegates/OpenAction.cs | 88 - src/Weakly/Delegates/OpenFunc.cs | 94 - src/Weakly/Delegates/WeakAction.cs | 238 +-- src/Weakly/Delegates/WeakDelegate.cs | 49 - src/Weakly/Delegates/WeakFunc.cs | 254 +-- src/Weakly/Events/IWeakEventHandler.cs | 10 + .../Events/WeakCanExecuteChangedHandler.cs | 22 + src/Weakly/Events/WeakEventHandler.cs | 130 +- src/Weakly/Events/WeakEventHandlerBase.cs | 146 ++ src/Weakly/Events/WeakEventSource.cs | 78 +- .../WeakNotifyPropertyChangedHandler.cs | 22 + src/Weakly/Weakly.csproj | 16 +- src/Weakly/Weakly.csproj.DotSettings | 19 +- 66 files changed, 325 insertions(+), 4869 deletions(-) delete mode 100644 samples/Demo.Library/Demo.Library.csproj delete mode 100644 samples/Demo.Library/Properties/AssemblyInfo.cs delete mode 100644 samples/Demo.Library/TestMethods.cs delete mode 100644 samples/Demo.Library/TestRunner.cs delete mode 100644 samples/Demo.Phone/App.xaml delete mode 100644 samples/Demo.Phone/App.xaml.cs delete mode 100644 samples/Demo.Phone/Assets/AlignmentGrid.png delete mode 100644 samples/Demo.Phone/Assets/ApplicationIcon.png delete mode 100644 samples/Demo.Phone/Assets/Tiles/FlipCycleTileLarge.png delete mode 100644 samples/Demo.Phone/Assets/Tiles/FlipCycleTileMedium.png delete mode 100644 samples/Demo.Phone/Assets/Tiles/FlipCycleTileSmall.png delete mode 100644 samples/Demo.Phone/Assets/Tiles/IconicTileMediumLarge.png delete mode 100644 samples/Demo.Phone/Assets/Tiles/IconicTileSmall.png delete mode 100644 samples/Demo.Phone/Demo.Phone.csproj delete mode 100644 samples/Demo.Phone/LocalizedStrings.cs delete mode 100644 samples/Demo.Phone/MainPage.xaml delete mode 100644 samples/Demo.Phone/MainPage.xaml.cs delete mode 100644 samples/Demo.Phone/Properties/AppManifest.xml delete mode 100644 samples/Demo.Phone/Properties/AssemblyInfo.cs delete mode 100644 samples/Demo.Phone/Properties/WMAppManifest.xml delete mode 100644 samples/Demo.Phone/Resources/AppResources.Designer.cs delete mode 100644 samples/Demo.Phone/Resources/AppResources.resx delete mode 100644 samples/Demo.Win81/App.xaml delete mode 100644 samples/Demo.Win81/App.xaml.cs delete mode 100644 samples/Demo.Win81/Assets/Logo.png delete mode 100644 samples/Demo.Win81/Assets/SmallLogo.png delete mode 100644 samples/Demo.Win81/Assets/SplashScreen.png delete mode 100644 samples/Demo.Win81/Assets/StoreLogo.png delete mode 100644 samples/Demo.Win81/Common/StandardStyles.xaml delete mode 100644 samples/Demo.Win81/Demo.Win81.csproj delete mode 100644 samples/Demo.Win81/Demo.Win81_TemporaryKey.pfx delete mode 100644 samples/Demo.Win81/MainPage.xaml delete mode 100644 samples/Demo.Win81/MainPage.xaml.cs delete mode 100644 samples/Demo.Win81/Package.appxmanifest delete mode 100644 samples/Demo.Win81/Properties/AssemblyInfo.cs delete mode 100644 samples/Demo.Wpf/App.config delete mode 100644 samples/Demo.Wpf/App.xaml delete mode 100644 samples/Demo.Wpf/App.xaml.cs delete mode 100644 samples/Demo.Wpf/Demo.Wpf.csproj delete mode 100644 samples/Demo.Wpf/MainWindow.xaml delete mode 100644 samples/Demo.Wpf/MainWindow.xaml.cs delete mode 100644 samples/Demo.Wpf/Properties/AssemblyInfo.cs delete mode 100644 samples/Demo.Wpf/Properties/Resources.Designer.cs delete mode 100644 samples/Demo.Wpf/Properties/Resources.resx delete mode 100644 samples/Demo.Wpf/Properties/Settings.Designer.cs delete mode 100644 samples/Demo.Wpf/Properties/Settings.settings delete mode 100644 src/Weakly/Delegates/DynamicDelegate.cs delete mode 100644 src/Weakly/Delegates/DynamicEvent.cs delete mode 100644 src/Weakly/Delegates/DynamicProperty.cs delete mode 100644 src/Weakly/Delegates/OpenAction.cs delete mode 100644 src/Weakly/Delegates/OpenFunc.cs delete mode 100644 src/Weakly/Delegates/WeakDelegate.cs create mode 100644 src/Weakly/Events/IWeakEventHandler.cs create mode 100644 src/Weakly/Events/WeakCanExecuteChangedHandler.cs create mode 100644 src/Weakly/Events/WeakEventHandlerBase.cs create mode 100644 src/Weakly/Events/WeakNotifyPropertyChangedHandler.cs diff --git a/README.md b/README.md index 742878a..b4ebbac 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,12 @@ Weakly is available through NuGet: * some Helpers ### Delegates -* `WeakAction` to `WeakAction<T1, T2, T3, T4, T5>` -* `WeakFunc<TResult>` to `WeakFunc<T1, T2, T3, T4, T5, TResult>` +* `WeakAction` +* `WeakFunc<TResult>` * `DisposableAction` executes an action when disposed ### Events -* `WeakEventHandler<TEventArgs>` +* `WeakEventHandler` * `WeakEventSource<TEventArgs>` ### Expressions diff --git a/Weakly.sln b/Weakly.sln index 2947045..1890f68 100644 --- a/Weakly.sln +++ b/Weakly.sln @@ -1,7 +1,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.30723.0 +VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weakly", "src\Weakly\Weakly.csproj", "{AA37F0C0-AA8C-46DE-AC8A-DB844C9AC556}" EndProject @@ -13,21 +13,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution build\Weakly.nuspec = build\Weakly.nuspec EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9631FAAF-E57A-4C3B-8C4F-3FAAE0BE097B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.Phone", "samples\Demo.Phone\Demo.Phone.csproj", "{9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.Win81", "samples\Demo.Win81\Demo.Win81.csproj", "{EF1121FE-83A7-4BFC-9754-4C928AAA01B9}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{CD637C73-7382-48F9-BFA2-20CD9469DB23}" ProjectSection(SolutionItems) = preProject .nuget\packages.config = .nuget\packages.config EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.Wpf", "samples\Demo.Wpf\Demo.Wpf.csproj", "{D29C99D6-1657-41F7-B41D-2BC0ACB48973}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo.Library", "samples\Demo.Library\Demo.Library.csproj", "{ECE781C9-3808-46CA-A947-97B1FED9DA51}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -50,78 +40,8 @@ Global {AA37F0C0-AA8C-46DE-AC8A-DB844C9AC556}.Release|ARM.ActiveCfg = Release|Any CPU {AA37F0C0-AA8C-46DE-AC8A-DB844C9AC556}.Release|x64.ActiveCfg = Release|Any CPU {AA37F0C0-AA8C-46DE-AC8A-DB844C9AC556}.Release|x86.ActiveCfg = Release|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|ARM.ActiveCfg = Debug|ARM - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|ARM.Build.0 = Debug|ARM - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|ARM.Deploy.0 = Debug|ARM - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|x64.ActiveCfg = Debug|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|x86.ActiveCfg = Debug|x86 - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|x86.Build.0 = Debug|x86 - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Debug|x86.Deploy.0 = Debug|x86 - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|Any CPU.Build.0 = Release|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|Any CPU.Deploy.0 = Release|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|ARM.ActiveCfg = Release|ARM - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|ARM.Build.0 = Release|ARM - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|ARM.Deploy.0 = Release|ARM - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|x64.ActiveCfg = Release|Any CPU - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|x86.ActiveCfg = Release|x86 - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|x86.Build.0 = Release|x86 - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}.Release|x86.Deploy.0 = Release|x86 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|ARM.ActiveCfg = Debug|ARM - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|ARM.Build.0 = Debug|ARM - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|ARM.Deploy.0 = Debug|ARM - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|x64.ActiveCfg = Debug|x64 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|x64.Build.0 = Debug|x64 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|x64.Deploy.0 = Debug|x64 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|x86.ActiveCfg = Debug|x86 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|x86.Build.0 = Debug|x86 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Debug|x86.Deploy.0 = Debug|x86 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|Any CPU.Build.0 = Release|Any CPU - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|Any CPU.Deploy.0 = Release|Any CPU - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|ARM.ActiveCfg = Release|ARM - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|ARM.Build.0 = Release|ARM - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|ARM.Deploy.0 = Release|ARM - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|x64.ActiveCfg = Release|x64 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|x64.Build.0 = Release|x64 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|x64.Deploy.0 = Release|x64 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|x86.ActiveCfg = Release|x86 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|x86.Build.0 = Release|x86 - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9}.Release|x86.Deploy.0 = Release|x86 - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Debug|ARM.ActiveCfg = Debug|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Debug|x64.ActiveCfg = Debug|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Debug|x86.ActiveCfg = Debug|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Release|Any CPU.Build.0 = Release|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Release|ARM.ActiveCfg = Release|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Release|x64.ActiveCfg = Release|Any CPU - {D29C99D6-1657-41F7-B41D-2BC0ACB48973}.Release|x86.ActiveCfg = Release|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Debug|ARM.ActiveCfg = Debug|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Debug|x64.ActiveCfg = Debug|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Debug|x86.ActiveCfg = Debug|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Release|Any CPU.Build.0 = Release|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Release|ARM.ActiveCfg = Release|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Release|x64.ActiveCfg = Release|Any CPU - {ECE781C9-3808-46CA-A947-97B1FED9DA51}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {9D75E61E-CF24-4412-9A0B-1DCD6467FFF8} = {9631FAAF-E57A-4C3B-8C4F-3FAAE0BE097B} - {EF1121FE-83A7-4BFC-9754-4C928AAA01B9} = {9631FAAF-E57A-4C3B-8C4F-3FAAE0BE097B} - {D29C99D6-1657-41F7-B41D-2BC0ACB48973} = {9631FAAF-E57A-4C3B-8C4F-3FAAE0BE097B} - {ECE781C9-3808-46CA-A947-97B1FED9DA51} = {9631FAAF-E57A-4C3B-8C4F-3FAAE0BE097B} - EndGlobalSection EndGlobal diff --git a/build/Weakly.nuspec b/build/Weakly.nuspec index f66523f..d4620fb 100644 --- a/build/Weakly.nuspec +++ b/build/Weakly.nuspec @@ -3,7 +3,7 @@ <metadata> <id>Weakly</id> <title>Weakly</title> - <version>2.2.3</version> + <version>2.4.0</version> <authors>Thomas Ibel</authors> <description>Weakly is a collection of some useful weak-reference types available as portable class library for net45+win8+wp8+wpa81.</description> <language>en-US</language> @@ -11,8 +11,8 @@ <projectUrl>https://github.com/tibel/Weakly</projectUrl> <iconUrl>https://raw.github.com/tibel/Weakly/master/build/weakly_icon.png</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> - <releaseNotes>added ManagedRuntime helper and some refactoring</releaseNotes> - <copyright>Copyright Thomas Ibel 2013-2014</copyright> + <releaseNotes>WeakAction, WeakFunc and WeakEventHandler now work without reflection</releaseNotes> + <copyright>Copyright Thomas Ibel 2013-2015</copyright> <tags> Weakly WeakReference WeakAction WeakFunc WeakDelegate WeakCollection WeakValueDictionary WeakEventHandler WeakEventSource Async Task </tags> diff --git a/samples/Demo.Library/Demo.Library.csproj b/samples/Demo.Library/Demo.Library.csproj deleted file mode 100644 index 7f95d82..0000000 --- a/samples/Demo.Library/Demo.Library.csproj +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{ECE781C9-3808-46CA-A947-97B1FED9DA51}</ProjectGuid> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>Demo.Library</RootNamespace> - <AssemblyName>Demo.Library</AssemblyName> - <DefaultLanguage>en-US</DefaultLanguage> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <TargetFrameworkProfile>Profile259</TargetFrameworkProfile> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - <!-- A reference to the entire .NET Framework is automatically included --> - </ItemGroup> - <ItemGroup> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="TestMethods.cs" /> - <Compile Include="TestRunner.cs" /> - </ItemGroup> - <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> -</Project> \ No newline at end of file diff --git a/samples/Demo.Library/Properties/AssemblyInfo.cs b/samples/Demo.Library/Properties/AssemblyInfo.cs deleted file mode 100644 index 09ecd9b..0000000 --- a/samples/Demo.Library/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Resources; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Demo.Library")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Demo.Library")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: NeutralResourcesLanguage("en")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/Demo.Library/TestMethods.cs b/samples/Demo.Library/TestMethods.cs deleted file mode 100644 index 510fa41..0000000 --- a/samples/Demo.Library/TestMethods.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Diagnostics; - -namespace Demo.Library -{ - internal class TestMethods - { - #region private static - - private static void StaticVoidNoParams() - { - Debug.WriteLine("StaticVoidNoParams"); - } - - private static int StaticIntNoParams() - { - return 11; - } - - private static void StaticVoidOneParam(int echo) - { - Debug.WriteLine("StaticVoidOneParam {0}", echo); - } - - private static int StaticIntOneParam(int add) - { - return 11 + add; - } - - #endregion - - #region private instance - - private void VoidNoParams() - { - Debug.WriteLine("VoidNoParams"); - } - - private int IntNoParams() - { - return 17; - } - - private void VoidOneParam(int echo) - { - Debug.WriteLine("VoidOneParam {0}", echo); - } - - private int IntOneParam(int add) - { - return 3 + add; - } - - #endregion - } -} diff --git a/samples/Demo.Library/TestRunner.cs b/samples/Demo.Library/TestRunner.cs deleted file mode 100644 index f1d2ca3..0000000 --- a/samples/Demo.Library/TestRunner.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; - -namespace Demo.Library -{ - public static class TestRunner - { - public static Type TestMethodsType - { - get { return typeof (TestMethods); } - } - - public static MethodInfo GetTestMethod(string methodName) - { - return TestMethodsType.GetRuntimeMethods().FirstOrDefault(m => m.Name == methodName); - } - } -} diff --git a/samples/Demo.Phone/App.xaml b/samples/Demo.Phone/App.xaml deleted file mode 100644 index aa59324..0000000 --- a/samples/Demo.Phone/App.xaml +++ /dev/null @@ -1,20 +0,0 @@ -<Application - x:Class="Demo.Phone.App" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" - xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"> - - <!--Application Resources--> - <Application.Resources> - <local:LocalizedStrings xmlns:local="clr-namespace:Demo.Phone" x:Key="LocalizedStrings"/> - </Application.Resources> - - <Application.ApplicationLifetimeObjects> - <!--Required object that handles lifetime events for the application--> - <shell:PhoneApplicationService - Launching="Application_Launching" Closing="Application_Closing" - Activated="Application_Activated" Deactivated="Application_Deactivated"/> - </Application.ApplicationLifetimeObjects> - -</Application> \ No newline at end of file diff --git a/samples/Demo.Phone/App.xaml.cs b/samples/Demo.Phone/App.xaml.cs deleted file mode 100644 index ad4f634..0000000 --- a/samples/Demo.Phone/App.xaml.cs +++ /dev/null @@ -1,223 +0,0 @@ -using System; -using System.Diagnostics; -using System.Resources; -using System.Windows; -using System.Windows.Markup; -using System.Windows.Navigation; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Shell; -using Demo.Phone.Resources; - -namespace Demo.Phone -{ - public partial class App : Application - { - /// <summary> - /// Provides easy access to the root frame of the Phone Application. - /// </summary> - /// <returns>The root frame of the Phone Application.</returns> - public static PhoneApplicationFrame RootFrame { get; private set; } - - /// <summary> - /// Constructor for the Application object. - /// </summary> - public App() - { - // Global handler for uncaught exceptions. - UnhandledException += Application_UnhandledException; - - // Standard XAML initialization - InitializeComponent(); - - // Phone-specific initialization - InitializePhoneApplication(); - - // Language display initialization - InitializeLanguage(); - - // Show graphics profiling information while debugging. - if (Debugger.IsAttached) - { - // Display the current frame rate counters. - Application.Current.Host.Settings.EnableFrameRateCounter = true; - - // Show the areas of the app that are being redrawn in each frame. - //Application.Current.Host.Settings.EnableRedrawRegions = true; - - // Enable non-production analysis visualization mode, - // which shows areas of a page that are handed off to GPU with a colored overlay. - //Application.Current.Host.Settings.EnableCacheVisualization = true; - - // Prevent the screen from turning off while under the debugger by disabling - // the application's idle detection. - // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run - // and consume battery power when the user is not using the phone. - PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; - } - - } - - // Code to execute when the application is launching (eg, from Start) - // This code will not execute when the application is reactivated - private void Application_Launching(object sender, LaunchingEventArgs e) - { - } - - // Code to execute when the application is activated (brought to foreground) - // This code will not execute when the application is first launched - private void Application_Activated(object sender, ActivatedEventArgs e) - { - } - - // Code to execute when the application is deactivated (sent to background) - // This code will not execute when the application is closing - private void Application_Deactivated(object sender, DeactivatedEventArgs e) - { - } - - // Code to execute when the application is closing (eg, user hit Back) - // This code will not execute when the application is deactivated - private void Application_Closing(object sender, ClosingEventArgs e) - { - } - - // Code to execute if a navigation fails - private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) - { - if (Debugger.IsAttached) - { - // A navigation has failed; break into the debugger - Debugger.Break(); - } - } - - // Code to execute on Unhandled Exceptions - private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) - { - if (Debugger.IsAttached) - { - // An unhandled exception has occurred; break into the debugger - Debugger.Break(); - } - } - - #region Phone application initialization - - // Avoid double-initialization - private bool phoneApplicationInitialized = false; - - // Do not add any additional code to this method - private void InitializePhoneApplication() - { - if (phoneApplicationInitialized) - return; - - // Create the frame but don't set it as RootVisual yet; this allows the splash - // screen to remain active until the application is ready to render. - RootFrame = new PhoneApplicationFrame(); - RootFrame.Navigated += CompleteInitializePhoneApplication; - - // Handle navigation failures - RootFrame.NavigationFailed += RootFrame_NavigationFailed; - - // Handle reset requests for clearing the backstack - RootFrame.Navigated += CheckForResetNavigation; - - // Ensure we don't initialize again - phoneApplicationInitialized = true; - } - - // Do not add any additional code to this method - private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) - { - // Set the root visual to allow the application to render - if (RootVisual != RootFrame) - RootVisual = RootFrame; - - // Remove this handler since it is no longer needed - RootFrame.Navigated -= CompleteInitializePhoneApplication; - } - - private void CheckForResetNavigation(object sender, NavigationEventArgs e) - { - // If the app has received a 'reset' navigation, then we need to check - // on the next navigation to see if the page stack should be reset - if (e.NavigationMode == NavigationMode.Reset) - RootFrame.Navigated += ClearBackStackAfterReset; - } - - private void ClearBackStackAfterReset(object sender, NavigationEventArgs e) - { - // Unregister the event so it doesn't get called again - RootFrame.Navigated -= ClearBackStackAfterReset; - - // Only clear the stack for 'new' (forward) and 'refresh' navigations - if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh) - return; - - // For UI consistency, clear the entire page stack - while (RootFrame.RemoveBackEntry() != null) - { - ; // do nothing - } - } - - #endregion - - // Initialize the app's font and flow direction as defined in its localized resource strings. - // - // To ensure that the font of your application is aligned with its supported languages and that the - // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage - // and ResourceFlowDirection should be initialized in each resx file to match these values with that - // file's culture. For example: - // - // AppResources.es-ES.resx - // ResourceLanguage's value should be "es-ES" - // ResourceFlowDirection's value should be "LeftToRight" - // - // AppResources.ar-SA.resx - // ResourceLanguage's value should be "ar-SA" - // ResourceFlowDirection's value should be "RightToLeft" - // - // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072. - // - private void InitializeLanguage() - { - try - { - // Set the font to match the display language defined by the - // ResourceLanguage resource string for each supported language. - // - // Fall back to the font of the neutral language if the Display - // language of the phone is not supported. - // - // If a compiler error is hit then ResourceLanguage is missing from - // the resource file. - RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage); - - // Set the FlowDirection of all elements under the root frame based - // on the ResourceFlowDirection resource string for each - // supported language. - // - // If a compiler error is hit then ResourceFlowDirection is missing from - // the resource file. - FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection); - RootFrame.FlowDirection = flow; - } - catch - { - // If an exception is caught here it is most likely due to either - // ResourceLangauge not being correctly set to a supported language - // code or ResourceFlowDirection is set to a value other than LeftToRight - // or RightToLeft. - - if (Debugger.IsAttached) - { - Debugger.Break(); - } - - throw; - } - } - } -} \ No newline at end of file diff --git a/samples/Demo.Phone/Assets/AlignmentGrid.png b/samples/Demo.Phone/Assets/AlignmentGrid.png deleted file mode 100644 index f7d2e97804e451530960b57429a2b0a26c86f5d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9042 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 P9fppEp?V3@{`&s_N`kct diff --git a/samples/Demo.Phone/Assets/ApplicationIcon.png b/samples/Demo.Phone/Assets/ApplicationIcon.png deleted file mode 100644 index 7d95d4e0810f4a4c85b5bb631ddd4d3a6be24ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3392 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 WvY8ND=rdIS0000<MNUMnLSTZS@prQT diff --git a/samples/Demo.Phone/Assets/Tiles/FlipCycleTileLarge.png b/samples/Demo.Phone/Assets/Tiles/FlipCycleTileLarge.png deleted file mode 100644 index e0c59ac014604b803533ef2debb7c10874a2f607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9930 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 IP1{HR1(GMkF8}}l diff --git a/samples/Demo.Phone/Assets/Tiles/FlipCycleTileMedium.png b/samples/Demo.Phone/Assets/Tiles/FlipCycleTileMedium.png deleted file mode 100644 index e93b89d600641c9d5b05f94493a9fde6afa850e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9070 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 diff --git a/samples/Demo.Phone/Assets/Tiles/FlipCycleTileSmall.png b/samples/Demo.Phone/Assets/Tiles/FlipCycleTileSmall.png deleted file mode 100644 index 550b1b5e8d003a61a751d27fc699c5931af855c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3674 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 diff --git a/samples/Demo.Phone/Assets/Tiles/IconicTileMediumLarge.png b/samples/Demo.Phone/Assets/Tiles/IconicTileMediumLarge.png deleted file mode 100644 index 686e6b53f0305953100b6b90067e85d26423100e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4937 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 Um7{6c-LC>@sp+ZKsMx&vA3)t6(EtDd diff --git a/samples/Demo.Phone/Assets/Tiles/IconicTileSmall.png b/samples/Demo.Phone/Assets/Tiles/IconicTileSmall.png deleted file mode 100644 index d4b5ede1b567fd4b90505217330edf7de0474432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3724 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 diff --git a/samples/Demo.Phone/Demo.Phone.csproj b/samples/Demo.Phone/Demo.Phone.csproj deleted file mode 100644 index fce6ca4..0000000 --- a/samples/Demo.Phone/Demo.Phone.csproj +++ /dev/null @@ -1,170 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProductVersion>10.0.20506</ProductVersion> - <SchemaVersion>2.0</SchemaVersion> - <ProjectGuid>{9D75E61E-CF24-4412-9A0B-1DCD6467FFF8}</ProjectGuid> - <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> - <OutputType>Library</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>Demo.Phone</RootNamespace> - <AssemblyName>Demo.Phone</AssemblyName> - <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier> - <TargetFrameworkVersion>v8.0</TargetFrameworkVersion> - <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion> - <SilverlightApplication>true</SilverlightApplication> - <SupportedCultures> - </SupportedCultures> - <XapOutputs>true</XapOutputs> - <GenerateSilverlightManifest>true</GenerateSilverlightManifest> - <XapFilename>Demo.Phone_$(Configuration)_$(Platform).xap</XapFilename> - <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate> - <SilverlightAppEntry>Demo.Phone.App</SilverlightAppEntry> - <ValidateXaml>true</ValidateXaml> - <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion> - <ThrowErrorsInValidation>true</ThrowErrorsInValidation> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>Bin\Debug</OutputPath> - <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>Bin\Release</OutputPath> - <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>Bin\x86\Debug</OutputPath> - <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>Bin\x86\Release</OutputPath> - <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' "> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>Bin\ARM\Debug</OutputPath> - <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' "> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>Bin\ARM\Release</OutputPath> - <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - <Compile Include="App.xaml.cs"> - <DependentUpon>App.xaml</DependentUpon> - </Compile> - <Compile Include="LocalizedStrings.cs" /> - <Compile Include="MainPage.xaml.cs"> - <DependentUpon>MainPage.xaml</DependentUpon> - </Compile> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Resources\AppResources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>AppResources.resx</DependentUpon> - </Compile> - </ItemGroup> - <ItemGroup> - <ApplicationDefinition Include="App.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </ApplicationDefinition> - <Page Include="MainPage.xaml"> - <SubType>Designer</SubType> - <Generator>MSBuild:Compile</Generator> - </Page> - </ItemGroup> - <ItemGroup> - <None Include="Properties\AppManifest.xml" /> - <None Include="Properties\WMAppManifest.xml"> - <SubType>Designer</SubType> - </None> - </ItemGroup> - <ItemGroup> - <Content Include="Assets\AlignmentGrid.png" /> - <Content Include="Assets\ApplicationIcon.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Assets\Tiles\FlipCycleTileLarge.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Assets\Tiles\FlipCycleTileMedium.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Assets\Tiles\FlipCycleTileSmall.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Assets\Tiles\IconicTileMediumLarge.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Assets\Tiles\IconicTileSmall.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - </ItemGroup> - <ItemGroup> - <EmbeddedResource Include="Resources\AppResources.resx"> - <Generator>PublicResXFileCodeGenerator</Generator> - <LastGenOutput>AppResources.Designer.cs</LastGenOutput> - </EmbeddedResource> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\src\Weakly\Weakly.csproj"> - <Project>{AA37F0C0-AA8C-46DE-AC8A-DB844C9AC556}</Project> - <Name>Weakly</Name> - </ProjectReference> - <ProjectReference Include="..\Demo.Library\Demo.Library.csproj"> - <Project>{ece781c9-3808-46ca-a947-97b1fed9da51}</Project> - <Name>Demo.Library</Name> - </ProjectReference> - </ItemGroup> - <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" /> - <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> - <ProjectExtensions /> -</Project> \ No newline at end of file diff --git a/samples/Demo.Phone/LocalizedStrings.cs b/samples/Demo.Phone/LocalizedStrings.cs deleted file mode 100644 index 2c80870..0000000 --- a/samples/Demo.Phone/LocalizedStrings.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Demo.Phone.Resources; - -namespace Demo.Phone -{ - /// <summary> - /// Provides access to string resources. - /// </summary> - public class LocalizedStrings - { - private static AppResources _localizedResources = new AppResources(); - - public AppResources LocalizedResources { get { return _localizedResources; } } - } -} \ No newline at end of file diff --git a/samples/Demo.Phone/MainPage.xaml b/samples/Demo.Phone/MainPage.xaml deleted file mode 100644 index 23b71aa..0000000 --- a/samples/Demo.Phone/MainPage.xaml +++ /dev/null @@ -1,72 +0,0 @@ -<phone:PhoneApplicationPage - x:Class="Demo.Phone.MainPage" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" - xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" - xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" - FontFamily="{StaticResource PhoneFontFamilyNormal}" - FontSize="{StaticResource PhoneFontSizeNormal}" - Foreground="{StaticResource PhoneForegroundBrush}" - SupportedOrientations="Portrait" Orientation="Portrait" - shell:SystemTray.IsVisible="True"> - - <!--LayoutRoot is the root grid where all page content is placed--> - <Grid x:Name="LayoutRoot" Background="Transparent"> - <Grid.RowDefinitions> - <RowDefinition Height="Auto"/> - <RowDefinition Height="*"/> - </Grid.RowDefinitions> - - <!-- LOCALIZATION NOTE: - To localize the displayed strings copy their values to appropriately named - keys in the app's neutral language resource file (AppResources.resx) then - replace the hard-coded text value between the attributes' quotation marks - with the binding clause whose path points to that string name. - - For example: - - Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}" - - This binding points to the template's string resource named "ApplicationTitle". - - Adding supported languages in the Project Properties tab will create a - new resx file per language that can carry the translated values of your - UI strings. The binding in these examples will cause the value of the - attributes to be drawn from the .resx file that matches the - CurrentUICulture of the app at run time. - --> - - <!--TitlePanel contains the name of the application and page title--> - <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> - <TextBlock Text="Weakly" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/> - <TextBlock Text="Phone Demo" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> - </StackPanel> - - <!--ContentPanel - place additional content here--> - <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> - <StackPanel> - <Border BorderThickness="1" BorderBrush="Gray"> - <StackPanel> - <TextBlock>Delegate samples</TextBlock> - <TextBlock Margin="0,5" Foreground="Gray" TextWrapping="Wrap">Weakly can call private static and instance methods on Silverlight, by compiling an Expression tree.</TextBlock> - <Button Content="WeakAction and WeakFunc" Click="OnWeakActionAndWeakFunc" /> - <Button Content="DynamicDelegate" Click="OnDynamicDelegate" /> - <Button Content="WeakEventHandler" Click="OnWeakEventHandler" /> - </StackPanel> - </Border> - </StackPanel> - </Grid> - - <!--Uncomment to see an alignment grid to help ensure your controls are - aligned on common boundaries. The image has a top margin of -32px to - account for the System Tray. Set this to 0 (or remove the margin altogether) - if the System Tray is hidden. - - Before shipping remove this XAML and the image itself.--> - <!--<Image Source="/Assets/AlignmentGrid.png" VerticalAlignment="Top" Height="800" Width="480" Margin="0,-32,0,0" Grid.Row="0" Grid.RowSpan="2" IsHitTestVisible="False" />--> - </Grid> - -</phone:PhoneApplicationPage> \ No newline at end of file diff --git a/samples/Demo.Phone/MainPage.xaml.cs b/samples/Demo.Phone/MainPage.xaml.cs deleted file mode 100644 index 867d54b..0000000 --- a/samples/Demo.Phone/MainPage.xaml.cs +++ /dev/null @@ -1,117 +0,0 @@ -using Demo.Library; -using Microsoft.Phone.Controls; -using System; -using System.Windows; -using Weakly; -using Weakly.Builders; - -namespace Demo.Phone -{ - public partial class MainPage : PhoneApplicationPage - { - // Constructor - public MainPage() - { - InitializeComponent(); - - // Sample code to localize the ApplicationBar - //BuildLocalizedApplicationBar(); - } - - // Sample code for building a localized ApplicationBar - //private void BuildLocalizedApplicationBar() - //{ - // // Set the page's ApplicationBar to a new instance of ApplicationBar. - // ApplicationBar = new ApplicationBar(); - - // // Create a new button and set the text value to the localized string from AppResources. - // ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative)); - // appBarButton.Text = AppResources.AppBarButtonText; - // ApplicationBar.Buttons.Add(appBarButton); - - // // Create a new menu item with the localized string from AppResources. - // ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText); - // ApplicationBar.MenuItems.Add(appBarMenuItem); - //} - - private void OnWeakActionAndWeakFunc(object sender, RoutedEventArgs e) - { - var instance = Activator.CreateInstance(TestRunner.TestMethodsType); - - try - { - var method = TestRunner.GetTestMethod("VoidNoParams"); - var action = new WeakAction(instance, method); - action.Invoke(); - - MessageBox.Show("null", "VoidNoParams", MessageBoxButton.OK); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "VoidNoParams", MessageBoxButton.OK); - } - - try - { - var method = TestRunner.GetTestMethod("IntOneParam"); - var function = new WeakFunc<int, int>(instance, method); - var result = function.Invoke(10); - - MessageBox.Show(result.ToString(), "IntOneParam", MessageBoxButton.OK); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "VoidNoParams", MessageBoxButton.OK); - } - } - - private void OnDynamicDelegate(object sender, RoutedEventArgs e) - { - InvokeDynamicDelegate(null, "StaticVoidNoParams"); - InvokeDynamicDelegate(null, "StaticIntNoParams"); - InvokeDynamicDelegate(null, "StaticVoidOneParam", 1); - InvokeDynamicDelegate(null, "StaticIntOneParam", 2); - - var instance = Activator.CreateInstance(TestRunner.TestMethodsType); - InvokeDynamicDelegate(instance, "VoidNoParams"); - InvokeDynamicDelegate(instance, "IntNoParams"); - InvokeDynamicDelegate(instance, "VoidOneParam", 1); - InvokeDynamicDelegate(instance, "IntOneParam", 2); - } - - private static void InvokeDynamicDelegate(object instance, string methodName, params object[] parameters) - { - try - { - var method = TestRunner.GetTestMethod(methodName); - var function = Builder.DynamicDelegate.BuildDynamic(method); - var result = function(instance, parameters); - - var resultText = (result != null) ? result.ToString() : "null"; - MessageBox.Show(resultText, methodName, MessageBoxButton.OK); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, methodName, MessageBoxButton.OK); - } - } - - private bool _weakEventRegistered; - - private void OnWeakEventHandler(object sender, RoutedEventArgs e) - { - if (!_weakEventRegistered) - { - _weakEventRegistered = true; - WeakEventHandler.Register<RoutedEventArgs>(sender, "Click", OnWeak); - - MessageBox.Show("Weak handler registered. Click again to test it.", "Weak Handler", MessageBoxButton.OK); - } - } - - private void OnWeak(object sender, RoutedEventArgs e) - { - MessageBox.Show("Hello from weak handler", "Weak Handler", MessageBoxButton.OK); - } - } -} \ No newline at end of file diff --git a/samples/Demo.Phone/Properties/AppManifest.xml b/samples/Demo.Phone/Properties/AppManifest.xml deleted file mode 100644 index 6712a11..0000000 --- a/samples/Demo.Phone/Properties/AppManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ -<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" -> - <Deployment.Parts> - </Deployment.Parts> -</Deployment> diff --git a/samples/Demo.Phone/Properties/AssemblyInfo.cs b/samples/Demo.Phone/Properties/AssemblyInfo.cs deleted file mode 100644 index c2b3242..0000000 --- a/samples/Demo.Phone/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Resources; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Demo.Phone")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Demo.Phone")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9b191aa4-8b23-4f9b-891c-5db5537e55b5")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: NeutralResourcesLanguageAttribute("en-US")] diff --git a/samples/Demo.Phone/Properties/WMAppManifest.xml b/samples/Demo.Phone/Properties/WMAppManifest.xml deleted file mode 100644 index 0f27595..0000000 --- a/samples/Demo.Phone/Properties/WMAppManifest.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - -<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2012/deployment" AppPlatformVersion="8.0"> - <DefaultLanguage xmlns="" code="en-US"/> - <App xmlns="" ProductID="{9d75e61e-cf24-4412-9a0b-1dcd6467fff8}" Title="Demo.Phone" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="Demo.Phone author" Description="Sample description" Publisher="Demo.Phone" PublisherID="{16d2e434-716d-4613-870f-19a42a366d0c}"> - <IconPath IsRelative="true" IsResource="false">Assets\ApplicationIcon.png</IconPath> - <Capabilities> - <Capability Name="ID_CAP_NETWORKING"/> - <Capability Name="ID_CAP_MEDIALIB_AUDIO"/> - <Capability Name="ID_CAP_MEDIALIB_PLAYBACK"/> - <Capability Name="ID_CAP_SENSORS"/> - <Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/> - </Capabilities> - <Tasks> - <DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/> - </Tasks> - <Tokens> - <PrimaryToken TokenID="Demo.PhoneToken" TaskName="_default"> - <TemplateFlip> - <SmallImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileSmall.png</SmallImageURI> - <Count>0</Count> - <BackgroundImageURI IsRelative="true" IsResource="false">Assets\Tiles\FlipCycleTileMedium.png</BackgroundImageURI> - <Title>Demo.Phone</Title> - <BackContent></BackContent> - <BackBackgroundImageURI></BackBackgroundImageURI> - <BackTitle></BackTitle> - <DeviceLockImageURI></DeviceLockImageURI> - <HasLarge></HasLarge> - </TemplateFlip> - </PrimaryToken> - </Tokens> - <ScreenResolutions> - <ScreenResolution Name="ID_RESOLUTION_WVGA"/> - <ScreenResolution Name="ID_RESOLUTION_WXGA"/> - <ScreenResolution Name="ID_RESOLUTION_HD720P"/> - </ScreenResolutions> - </App> -</Deployment> \ No newline at end of file diff --git a/samples/Demo.Phone/Resources/AppResources.Designer.cs b/samples/Demo.Phone/Resources/AppResources.Designer.cs deleted file mode 100644 index 9c294a3..0000000 --- a/samples/Demo.Phone/Resources/AppResources.Designer.cs +++ /dev/null @@ -1,127 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.17626 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Demo.Phone.Resources -{ - using System; - - - /// <summary> - /// A strongly-typed resource class, for looking up localized strings, etc. - /// </summary> - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class AppResources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal AppResources() - { - } - - /// <summary> - /// Returns the cached ResourceManager instance used by this class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager - { - get - { - if (object.ReferenceEquals(resourceMan, null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.Phone.Resources.AppResources", typeof(AppResources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// <summary> - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - - /// <summary> - /// Looks up a localized string similar to LeftToRight. - /// </summary> - public static string ResourceFlowDirection - { - get - { - return ResourceManager.GetString("ResourceFlowDirection", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to us-EN. - /// </summary> - public static string ResourceLanguage - { - get - { - return ResourceManager.GetString("ResourceLanguage", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to MY APPLICATION. - /// </summary> - public static string ApplicationTitle - { - get - { - return ResourceManager.GetString("ApplicationTitle", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to button. - /// </summary> - public static string AppBarButtonText - { - get - { - return ResourceManager.GetString("AppBarButtonText", resourceCulture); - } - } - - /// <summary> - /// Looks up a localized string similar to menu item. - /// </summary> - public static string AppBarMenuItemText - { - get - { - return ResourceManager.GetString("AppBarMenuItemText", resourceCulture); - } - } - } -} diff --git a/samples/Demo.Phone/Resources/AppResources.resx b/samples/Demo.Phone/Resources/AppResources.resx deleted file mode 100644 index 529a194..0000000 --- a/samples/Demo.Phone/Resources/AppResources.resx +++ /dev/null @@ -1,137 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" use="required" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - <xsd:attribute ref="xml:space" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <data name="ResourceFlowDirection" xml:space="preserve"> - <value>LeftToRight</value> - <comment>Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language</comment> - </data> - <data name="ResourceLanguage" xml:space="preserve"> - <value>en-US</value> - <comment>Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.</comment> - </data> - <data name="ApplicationTitle" xml:space="preserve"> - <value>MY APPLICATION</value> - </data> - <data name="AppBarButtonText" xml:space="preserve"> - <value>add</value> - </data> - <data name="AppBarMenuItemText" xml:space="preserve"> - <value>Menu Item</value> - </data> -</root> \ No newline at end of file diff --git a/samples/Demo.Win81/App.xaml b/samples/Demo.Win81/App.xaml deleted file mode 100644 index e1203ba..0000000 --- a/samples/Demo.Win81/App.xaml +++ /dev/null @@ -1,20 +0,0 @@ -<Application - x:Class="Demo.Win8.App" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:local="using:Demo.Win8"> - - <Application.Resources> - <ResourceDictionary> - <ResourceDictionary.MergedDictionaries> - - <!-- - Styles that define common aspects of the platform look and feel - Required by Visual Studio project and item templates - --> - <ResourceDictionary Source="Common/StandardStyles.xaml"/> - </ResourceDictionary.MergedDictionaries> - - </ResourceDictionary> - </Application.Resources> -</Application> diff --git a/samples/Demo.Win81/App.xaml.cs b/samples/Demo.Win81/App.xaml.cs deleted file mode 100644 index 671d5f9..0000000 --- a/samples/Demo.Win81/App.xaml.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using Windows.ApplicationModel; -using Windows.ApplicationModel.Activation; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; - -namespace Demo.Win8 -{ - /// <summary> - /// Provides application-specific behavior to supplement the default Application class. - /// </summary> - sealed partial class App : Application - { - /// <summary> - /// Initializes the singleton application object. This is the first line of authored code - /// executed, and as such is the logical equivalent of main() or WinMain(). - /// </summary> - public App() - { - InitializeComponent(); - Suspending += OnSuspending; - } - - /// <summary> - /// Invoked when the application is launched normally by the end user. Other entry points - /// will be used when the application is launched to open a specific file, to display - /// search results, and so forth. - /// </summary> - /// <param name="args">Details about the launch request and process.</param> - protected override void OnLaunched(LaunchActivatedEventArgs args) - { - var rootFrame = Window.Current.Content as Frame; - - // Do not repeat app initialization when the Window already has content, - // just ensure that the window is active - if (rootFrame == null) - { - // Create a Frame to act as the navigation context and navigate to the first page - rootFrame = new Frame(); - - if (args.PreviousExecutionState == ApplicationExecutionState.Terminated) - { - // Load state from previously suspended application - } - - // Place the frame in the current Window - Window.Current.Content = rootFrame; - } - - if (rootFrame.Content == null) - { - // When the navigation stack isn't restored navigate to the first page, - // configuring the new page by passing required information as a navigation - // parameter - if (!rootFrame.Navigate(typeof(MainPage), args.Arguments)) - { - throw new Exception("Failed to create initial page"); - } - } - // Ensure the current window is active - Window.Current.Activate(); - } - - /// <summary> - /// Invoked when application execution is being suspended. Application state is saved - /// without knowing whether the application will be terminated or resumed with the contents - /// of memory still intact. - /// </summary> - /// <param name="sender">The source of the suspend request.</param> - /// <param name="e">Details about the suspend request.</param> - private void OnSuspending(object sender, SuspendingEventArgs e) - { - var deferral = e.SuspendingOperation.GetDeferral(); - // Save application state and stop any background activity - deferral.Complete(); - } - } -} diff --git a/samples/Demo.Win81/Assets/Logo.png b/samples/Demo.Win81/Assets/Logo.png deleted file mode 100644 index e26771cb33a49bbef824aa333737181b0a5b09a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm4M^HB7Cr(}k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=1foIEGZ*dUJQLud<^=L*gE#63Ho!PGzwUb%GPK6&5iF zt!p@aGNX}6<M7XW5|S^O@_K8GcU#~8zUR`ZM%|n9Dor+T`?Fc{_(!KzcM~{RrX3K9 z5Q<>(PVh|N)M-?0RNcTbjaWgEU8noxUax-n>&3Ay)#!y&O11y2s<nJ)KKpF-5>KEF zt72@XC1)RvT6Xw=y_`Ce)`nGULLL^lI$kwi^E+dQT7YeXY4GvlRR%kj1x$VZi%Bdd zz}2Giy=-_$h+v#(S+};)DuE4EM?_^qB_eDeo@&q%StD1F>L|*0ZC2sb-}llSMTM?O z6{b3iid~yk@VE7q7Wb+P8?H5IYp?pSVcL<YlA&A?-VaXoY4NVHEc9LQYbtA~Rz&fG zSq@)=-u<?`9I^cOnQHAA^#I!x>E~18m#ygK20HL@6W5woI~Fjlw$fX1U{xQA5a+t0 zH$WNIb=fNpWHo}M9#;K6eszDZKty_|-?j4iocj5#zotrWc;@;w`H@=mjsvS2wXX0_ zY}l$4@^sE?UcC)ji*L=Z&}P!xaL&2((OQlj2dv~pV-ifAS;ZsH1{`D!GY%<eyvhR< zs$H~ebuZVtCmT*Zk#o4a&4D#MD8fBt_p}ucyx6k+LJCwHx3XyMXgVAv6j~PJY!vd_ zGBEX+sRPiQ|NU7P>yys5WH)f>ZLo5m%6XjuXdbKMR7MEHSyb{m!_{Afji&MT$_sz7 z>1{~MlIFe28FRN(GC_~;#Jp4ADipP+9hh|P#-&`vO-Upt3jE0@YLh(^55uYWl9g)Z RA3>Rb!PC{xWt~$(69A&hN*MqE diff --git a/samples/Demo.Win81/Assets/SmallLogo.png b/samples/Demo.Win81/Assets/SmallLogo.png deleted file mode 100644 index 1eb0d9d528c42f132872e8af4dc563081b0b9aff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmV-P0k-~$P)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy>q$gGRCwC#*X;?zAP@%N+|i#I!$mrh zlQ>KU$Rdu>|JH&931_?y6Djl{gb>4nCV5pzDJ?S!mq|4ZejKj%i@j$H{#ML~2Y{DF z$=}bKPaz+UGt{v(4CTQQXym}&iW8{s!ew~XIE7NLjQpy#I2S$rous$~?f%DHT#B*+ zq=#!zc5=0FEqWFpB%UE(L807on!pidHPLgYO}XEgorrg;PB=8ipgQ5u5`&g_MQaRd zaU7Ao8XQMuuN21-s0PPTs1%38x_Yl3Fs-|Y4!C-;M-8<ZZS<TqNqib^SMD<4zlFK0 b-U18&d-UZ%OI+v700000NkvXXu0mjfvyO*s diff --git a/samples/Demo.Win81/Assets/SplashScreen.png b/samples/Demo.Win81/Assets/SplashScreen.png deleted file mode 100644 index c951e031bdfa0d4ebe68d52647f14caf710ca471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2146 zcmb_ee{2(V6#s5lN>g@n*v@1<b=M3U|6s-?wu(;ZSjSjm7Y1Z0YO=0bp{Bc`WN|E_ z-fA4z*Z`44la{D-24m8dH56jSm~E7z@kgl6qju4O{=v*9DC!?9Mttw?x}MP~ME`nw z-+tfcectDN@4bb$w71emi;)mQw{3Q9C8V;KkczbiJ)Ath=IRufn*J6~|F+#b`v<!B z_(@aGZl9lP<GXkHxB9z#2A}@O-$;l-*XC;4zPC94bwl5z)7;YW@U`4*p+h=!S3Y(B z{>|s#GQ665=9@Rxy?u0YW0&WN+~=RXpPbVXXL4m7Aq=E6I0%{06TwRn=U9d8>exk> zD-Z%M3DNQ`bTLSEF=%NFyoHcAkD*Ci<!z`e%=hWWPQScr{MpVjjS`}U#(fs{@?@s( z=f)Rms4qw77OwBjM0H2b7}+Cp3%?zuQhI}f;W-H+<8;Y^n&WiVVsJRqR%y}ko`?mS z6ZV-Eg7?Mm8Xq`Y%~#b19im=)8G{(UjHJNY0DdT7;zc{!=0w=e^a@}rLbQt&RR<5b zqKoy>Xqljo*0E?o$Gi<JD3u@fm{d#YSkaM<dZ-CKSPNHhro*bWN?Pjfbl9HKhiFF5 zzF1`3t!2URK6hfsODWk))M5dXmW3+@*%daJ5ZM3=u2^Dm*o?pa+pW9}6%`$+l7$8! zchnv%a8)cSha43PN`b6yR7~coSWrp`u<MEn9T^bl$lRnIfThNk0Y^_jNeW2{V-@G| zT`H+l7fUBksnPWhs(5$Y$zx-Lz={JZ)n%<QrT)-}%4<S_VU(-nzq-QfYd4YAEz@=B zW5eg)TR$_iM}DBf$jInVb)ua+&>DC4q}}|%*0WghLlK#npw?hecrM}Mw?`E(z5C8< z8&*b^!{>5?4aT89vdrgBgSc-x6JZD3F^l#*G(@OO*^1D%Eu7?HAy<3k<n+|3Ofo=y z3mktj2alVo?!FMUB!4yWhreJ1b7w)g;``y;ZRb2Yo`gp--tp&nV>TLqW9N{^#6vso zVQwY48q7)m{~xQ64RV7{E7Y=&T~?^05Ky`5oNQ8bLgFCPq9co^R09BVRS1OAmH;hU zC#q(N!gNqm!zU#%sv{r5mm-Uv8b-~a1F-;p^>)pnXfKge4s9?;;MFIr*fixPG}NBA z6_G5BEmeO6XXh(emkciB{7tA;iwC2^s^VzyU_h0@ae84ACMY`cIDEju=<`q|2QAEv zW_)W|i|9aknqdmS=#w73eW_csQ$8IhT^vY1^1;X3&J0{%*tcQq!gJpr3w?TJc~@5= zKV5sM{$3k>b#S$@CTkhIF*{v*u(F&$&Yq1naHxt8Mz2N%7aQ3(^VNRZahk1||7?Bl z*idzO_u)FhRj4cPzDO>YA>>lxAGaciEiX8Xzp1SVPv91};$OG3cC&8!v3{Jq^kH@8 UTIccK;hzT5*3#}uZuEx!0OwrBv;Y7A diff --git a/samples/Demo.Win81/Assets/StoreLogo.png b/samples/Demo.Win81/Assets/StoreLogo.png deleted file mode 100644 index dcb672712c6823a0c91548ded70a8acb85536b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 429 zcmV;e0aE^nP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzPf0{URCwC#+R+KaAP@%Nc=WMjbdiqa zBpIN?bdiqXduqTy9wJ8X{yRw&LZJomt1)*Mb<46$S7<a{qz%Y`fZ8MT{kQXRzi&4q z`xfHmopV2n0mks~iXU^lo}4ujQU`PD&=L_i5O0M!K=@`zx}DT9M~Kp`U0m$im=?t8 zr<N9`6;bv0MPoRK>NtYJa1l)bQ5qwGXpZbs7%2oRMd4y35$s&66(fxhNg8W02!vSn zdlrL2h^Fx+3=$z;kK{0D#MyeJ8WRWZcLSf(PcQ_mLOhrmC}O-tX^0c>5`YvCUZVsc zG-6#78ubjJ5nA;OX&^K(q=i6ZNE3m?kTwE^AqxZoLskfB3|S&1F=UO9!cY$g2@Lgu z;9{sJ1P9|X2L`r1#Gs8R{E^$PRrMaC86q<?teSo8;M4n2kIR(0ZXBu^kO8>|<S)Pg XJ9Ld-yKA-b00000NkvXXu0mjfItQrL diff --git a/samples/Demo.Win81/Common/StandardStyles.xaml b/samples/Demo.Win81/Common/StandardStyles.xaml deleted file mode 100644 index 85f4ed6..0000000 --- a/samples/Demo.Win81/Common/StandardStyles.xaml +++ /dev/null @@ -1,1829 +0,0 @@ -<!-- - This file contains XAML styles that simplify application development. - - These are not merely convenient, but are required by most Visual Studio project and item templates. - Removing, renaming, or otherwise modifying the content of these files may result in a project that - does not build, or that will not build once additional pages are added. If variations on these - styles are desired it is recommended that you copy the content under a new name and modify your - private copy. ---> - -<ResourceDictionary - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - - <!-- Non-brush values that vary across themes --> - - <ResourceDictionary.ThemeDictionaries> - <ResourceDictionary x:Key="Default"> - <x:String x:Key="BackButtonGlyph"></x:String> - <x:String x:Key="BackButtonSnappedGlyph"></x:String> - </ResourceDictionary> - - <ResourceDictionary x:Key="HighContrast"> - <x:String x:Key="BackButtonGlyph"></x:String> - <x:String x:Key="BackButtonSnappedGlyph"></x:String> - </ResourceDictionary> - </ResourceDictionary.ThemeDictionaries> - - <x:String x:Key="ChevronGlyph"></x:String> - - <!-- RichTextBlock styles --> - - <Style x:Key="BasicRichTextStyle" TargetType="RichTextBlock"> - <Setter Property="Foreground" Value="{StaticResource ApplicationForegroundThemeBrush}"/> - <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/> - <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> - <Setter Property="TextTrimming" Value="WordEllipsis"/> - <Setter Property="TextWrapping" Value="Wrap"/> - <Setter Property="Typography.StylisticSet20" Value="True"/> - <Setter Property="Typography.DiscretionaryLigatures" Value="True"/> - <Setter Property="Typography.CaseSensitiveForms" Value="True"/> - </Style> - - <Style x:Key="BaselineRichTextStyle" TargetType="RichTextBlock" BasedOn="{StaticResource BasicRichTextStyle}"> - <Setter Property="LineHeight" Value="20"/> - <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> - <!-- Properly align text along its baseline --> - <Setter Property="RenderTransform"> - <Setter.Value> - <TranslateTransform X="-1" Y="4"/> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="ItemRichTextStyle" TargetType="RichTextBlock" BasedOn="{StaticResource BaselineRichTextStyle}"/> - - <Style x:Key="BodyRichTextStyle" TargetType="RichTextBlock" BasedOn="{StaticResource BaselineRichTextStyle}"> - <Setter Property="FontWeight" Value="SemiLight"/> - </Style> - - <!-- TextBlock styles --> - - <Style x:Key="BasicTextStyle" TargetType="TextBlock"> - <Setter Property="Foreground" Value="{StaticResource ApplicationForegroundThemeBrush}"/> - <Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/> - <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> - <Setter Property="TextTrimming" Value="WordEllipsis"/> - <Setter Property="TextWrapping" Value="Wrap"/> - <Setter Property="Typography.StylisticSet20" Value="True"/> - <Setter Property="Typography.DiscretionaryLigatures" Value="True"/> - <Setter Property="Typography.CaseSensitiveForms" Value="True"/> - </Style> - - <Style x:Key="BaselineTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BasicTextStyle}"> - <Setter Property="LineHeight" Value="20"/> - <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> - <!-- Properly align text along its baseline --> - <Setter Property="RenderTransform"> - <Setter.Value> - <TranslateTransform X="-1" Y="4"/> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="HeaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> - <Setter Property="FontSize" Value="56"/> - <Setter Property="FontWeight" Value="Light"/> - <Setter Property="LineHeight" Value="40"/> - <Setter Property="RenderTransform"> - <Setter.Value> - <TranslateTransform X="-2" Y="8"/> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="SubheaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> - <Setter Property="FontSize" Value="26.667"/> - <Setter Property="FontWeight" Value="Light"/> - <Setter Property="LineHeight" Value="30"/> - <Setter Property="RenderTransform"> - <Setter.Value> - <TranslateTransform X="-1" Y="6"/> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="TitleTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> - <Setter Property="FontWeight" Value="SemiBold"/> - </Style> - - <Style x:Key="SubtitleTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> - <Setter Property="FontWeight" Value="Normal"/> - </Style> - - <Style x:Key="ItemTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"/> - - <Style x:Key="BodyTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> - <Setter Property="FontWeight" Value="SemiLight"/> - </Style> - - <Style x:Key="CaptionTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BaselineTextStyle}"> - <Setter Property="FontSize" Value="12"/> - <Setter Property="Foreground" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> - </Style> - - <Style x:Key="GroupHeaderTextStyle" TargetType="TextBlock"> - <Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/> - <Setter Property="TextTrimming" Value="WordEllipsis"/> - <Setter Property="TextWrapping" Value="NoWrap"/> - <Setter Property="Typography.StylisticSet20" Value="True"/> - <Setter Property="Typography.DiscretionaryLigatures" Value="True"/> - <Setter Property="Typography.CaseSensitiveForms" Value="True"/> - <Setter Property="FontSize" Value="26.667"/> - <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> - <Setter Property="FontWeight" Value="Light"/> - <Setter Property="LineHeight" Value="30"/> - <Setter Property="RenderTransform"> - <Setter.Value> - <TranslateTransform X="-1" Y="6"/> - </Setter.Value> - </Setter> - </Style> - - <!-- Button styles --> - - <!-- - TextButtonStyle is used to style a Button using subheader-styled text with no other adornment. There - are two styles that are based on TextButtonStyle (TextPrimaryButtonStyle and TextSecondaryButtonStyle) - which are used in the GroupedItemsPage as a group header and in the FileOpenPickerPage for triggering - commands. - --> - <Style x:Key="TextButtonStyle" TargetType="ButtonBase"> - <Setter Property="MinWidth" Value="0"/> - <Setter Property="MinHeight" Value="0"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="ButtonBase"> - <Grid Background="Transparent"> - <ContentPresenter x:Name="Text" Content="{TemplateBinding Content}" /> - <Rectangle - x:Name="FocusVisualWhite" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="1.5"/> - <Rectangle - x:Name="FocusVisualBlack" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="0.5"/> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="PointerOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPointerOverForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationPressedForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - <VisualStateGroup x:Name="FocusStates"> - <VisualState x:Name="Focused"> - <Storyboard> - <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualWhite" Storyboard.TargetProperty="Opacity"/> - <DoubleAnimation Duration="0" To="1" Storyboard.TargetName="FocusVisualBlack" Storyboard.TargetProperty="Opacity"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Unfocused"/> - </VisualStateGroup> - <VisualStateGroup x:Name="CheckStates"> - <VisualState x:Name="Checked"/> - <VisualState x:Name="Unchecked"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Text" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Indeterminate"/> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <Style x:Key="TextPrimaryButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource TextButtonStyle}"> - <Setter Property="Foreground" Value="{StaticResource ApplicationHeaderForegroundThemeBrush}"/> - </Style> - - <Style x:Key="TextSecondaryButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource TextButtonStyle}"> - <Setter Property="Foreground" Value="{StaticResource ApplicationSecondaryForegroundThemeBrush}"/> - </Style> - - <!-- - TextRadioButtonStyle is used to style a RadioButton using subheader-styled text with no other adornment. - This style is used in the SearchResultsPage to allow selection among filters. - --> - <Style x:Key="TextRadioButtonStyle" TargetType="RadioButton" BasedOn="{StaticResource TextButtonStyle}"> - <Setter Property="Margin" Value="0,0,30,0"/> - </Style> - - <!-- - AppBarButtonStyle is used to style a Button (or ToggleButton) for use in an App Bar. Content will be centered - and should fit within the 40 pixel radius glyph provided. 16-point Segoe UI Symbol is used for content text - to simplify the use of glyphs from that font. AutomationProperties.Name is used for the text below the glyph. - --> - <Style x:Key="AppBarButtonStyle" TargetType="ButtonBase"> - <Setter Property="Foreground" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> - <Setter Property="VerticalAlignment" Value="Stretch"/> - <Setter Property="FontFamily" Value="Segoe UI Symbol"/> - <Setter Property="FontWeight" Value="Normal"/> - <Setter Property="FontSize" Value="20"/> - <Setter Property="AutomationProperties.ItemType" Value="App Bar Button"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="ButtonBase"> - <Grid x:Name="RootGrid" Width="100" Background="Transparent"> - <StackPanel VerticalAlignment="Top" Margin="0,12,0,11"> - <Grid Width="40" Height="40" Margin="0,0,0,5" HorizontalAlignment="Center"> - <TextBlock x:Name="BackgroundGlyph" Text="" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0" Foreground="{StaticResource AppBarItemBackgroundThemeBrush}"/> - <TextBlock x:Name="OutlineGlyph" Text="" FontFamily="Segoe UI Symbol" FontSize="53.333" Margin="-4,-19,0,0"/> - <ContentPresenter x:Name="Content" HorizontalAlignment="Center" Margin="-1,-1,0,0" VerticalAlignment="Center"/> - </Grid> - <TextBlock - x:Name="TextLabel" - Text="{TemplateBinding AutomationProperties.Name}" - Foreground="{StaticResource AppBarItemForegroundThemeBrush}" - Margin="0,0,2,0" - FontSize="12" - TextAlignment="Center" - Width="88" - MaxHeight="32" - TextTrimming="WordEllipsis" - Style="{StaticResource BasicTextStyle}"/> - </StackPanel> - <Rectangle - x:Name="FocusVisualWhite" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="1.5"/> - <Rectangle - x:Name="FocusVisualBlack" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="0.5"/> - - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="ApplicationViewStates"> - <VisualState x:Name="FullScreenLandscape"/> - <VisualState x:Name="Filled"/> - <VisualState x:Name="FullScreenPortrait"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Visibility"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Width"> - <DiscreteObjectKeyFrame KeyTime="0" Value="60"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Snapped"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Visibility"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Width"> - <DiscreteObjectKeyFrame KeyTime="0" Value="60"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="PointerOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPointerOverBackgroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPointerOverForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPressedForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemDisabledForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemDisabledForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="TextLabel" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemDisabledForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - <VisualStateGroup x:Name="FocusStates"> - <VisualState x:Name="Focused"> - <Storyboard> - <DoubleAnimation - Storyboard.TargetName="FocusVisualWhite" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - <DoubleAnimation - Storyboard.TargetName="FocusVisualBlack" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Unfocused" /> - <VisualState x:Name="PointerFocused" /> - </VisualStateGroup> - <VisualStateGroup x:Name="CheckStates"> - <VisualState x:Name="Checked"> - <Storyboard> - <DoubleAnimation Duration="0" To="0" Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Opacity"/> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundCheckedGlyph" Storyboard.TargetProperty="Visibility"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPressedForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Unchecked"/> - <VisualState x:Name="Indeterminate"/> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <!-- - Standard AppBarButton Styles for use with Button and ToggleButton - - An AppBarButton Style is provided for each of the glyphs in the Segoe UI Symbol font. - Uncomment any style you reference (as not all may be required). - --> - - <!-- - - <Style x:Key="SkipBackAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SkipBackAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Skip Back"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SkipAheadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SkipAheadAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Skip Ahead"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PlayAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PlayAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Play"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PauseAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PauseAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Pause"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="EditAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="EditAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Edit"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SaveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SaveAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Save"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DeleteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DeleteAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Delete"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DiscardAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DiscardAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Discard"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RemoveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RemoveAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Remove"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AddAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AddAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Add"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="NoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="NoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="No"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="YesAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="YesAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Yes"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MoreAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MoreAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="More"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RedoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RedoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Redo"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="UndoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UndoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Undo"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="HomeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="HomeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Home"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OutAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OutAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Out"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="NextAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="NextAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Next"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PreviousAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PreviousAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Previous"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FavoriteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FavoriteAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Favorite"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PhotoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PhotoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Photo"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SettingsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SettingsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Settings"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="VideoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="VideoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Video"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RefreshAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RefreshAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Refresh"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DownloadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DownloadAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Download"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MailAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MailAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Mail"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SearchAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SearchAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Search"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="HelpAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="HelpAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Help"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="UploadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UploadAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Upload"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="EmojiAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="EmojiAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Emoji"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="TwoPageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="TwoPageAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Two Page"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="LeaveChatAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="LeaveChatAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Upload"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MailForwardAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MailForwardAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Forward Mail"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ClockAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ClockAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Clock"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SendAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SendAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Send"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CropAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CropAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Crop"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RotateCameraAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RotateCameraAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Rotate Camera"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PeopleAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PeopleAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="People"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ClosePaneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ClosePaneAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Close Pane"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OpenPaneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OpenPaneAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Open Pane"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="WorldAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="WorldAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="World"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FlagAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FlagAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Flag"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PreviewLinkAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PreviewLinkAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Preview Link"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="GlobeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="GlobeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Globe"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="TrimAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="TrimAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Trim"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AttachCameraAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AttachCameraAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Attach Camera"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ZoomInAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ZoomInAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Zoom In"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="BookmarksAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="BookmarksAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Bookmarks"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DocumentAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DocumentAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Document"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ProtectedDocumentAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ProtectedDocumentAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Protected Document"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PageAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Page"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="BulletsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="BulletsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Bullets"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CommentAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CommentAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Comment"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="Mail2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="Mail2AppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Mail2"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ContactInfoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ContactInfoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Contact Info"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="HangUpAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="HangUpAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Hang Up"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ViewAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ViewAllAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="View All"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MapPinAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MapPinAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Map Pin"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PhoneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PhoneAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Phone"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="VideoChatAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="VideoChatAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Video Chat"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SwitchAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SwitchAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Switch"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ContactAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ContactAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Contact"/> - <Setter Property="Content" Value=""/> - </Style> - - --> - - <!-- - - <Style x:Key="RenameAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RenameAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Rename"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PinAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PinAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Pin"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MusicInfoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MusicInfoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Music Info"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="GoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="GoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Go"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="KeyboardAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="KeyboardAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Keyboard"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DockLeftAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DockLeftAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Dock Left"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DockRightAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DockRightAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Dock Right"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DockBottomAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DockBottomAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Dock Bottom"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RemoteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RemoteAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Remote"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SyncAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SyncAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Sync"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RotateAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RotateAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Rotate"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ShuffleAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ShuffleAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Shuffle"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ListAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ListAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="List"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ShopAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ShopAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Shop"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SelectAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SelectAllAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Select All"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OrientationAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OrientationAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Orientation"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ImportAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ImportAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Import"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ImportAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ImportAllAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Import All"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="BrowsePhotosAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="BrowsePhotosAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Browse Photos"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="WebcamAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="WebcamAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Webcam"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="PicturesAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PicturesAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Pictures"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SaveLocalAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SaveLocalAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Save Local"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CaptionAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CaptionAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Caption"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="StopAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="StopAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Stop"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ShowResultsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ShowResultsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Show Results"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="VolumeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="VolumeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Volume"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RepairAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RepairAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Repair"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MessageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MessageAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Message"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="Page2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="Page2AppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Page2"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CalendarDayAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CalendarDayAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Day"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CalendarWeekAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CalendarWeekAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Week"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CalendarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CalendarAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Calendar"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CharactersAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CharactersAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Characters"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MailReplyAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MailReplyAllAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Reply All"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ReadAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ReadAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Read"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="LinkAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="LinkAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Link"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AccountsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AccountsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Accounts"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ShowBccAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ShowBccAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Show Bcc"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="HideBccAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="HideBccAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Hide Bcc"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="CutAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CutAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Cut"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AttachAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AttachAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Attach"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PasteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PasteAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Paste"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FilterAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FilterAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Filter"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CopyAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CopyAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Copy"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="Emoji2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="Emoji2AppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Emoji2"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ImportantAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ImportantAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Important"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MailReplyAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MailReplyAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Reply"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SlideShowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SlideShowAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Slideshow"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SortAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SortAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Sort"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ManageAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ManageAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Manage"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AllAppsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AllAppsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="All Apps"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DisconnectDriveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DisconnectDriveAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Disconnect Drive"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MapDriveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MapDriveAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Map Drive"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="NewWindowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="NewWindowAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="New Window"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OpenWithAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OpenWithAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Open With"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ContactPresenceAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ContactPresenceAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Presence"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PriorityAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PriorityAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Priority"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="UploadSkyDriveAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UploadSkyDriveAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Skydrive"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="GoToTodayAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="GoToTodayAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Today"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FontAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FontAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Font"/> - <Setter Property="Content" Value=""/> - </Style> - - --> - - <!-- - - <Style x:Key="FontColorAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FontColorAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Font Color"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="Contact2AppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="Contact2AppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Contact"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FolderppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FolderAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Folder"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AudioAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AudioAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Audio"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PlaceholderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PlaceholderAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Placeholder"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ViewAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ViewAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="View"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SetLockScreenAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SetLockscreenAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Set Lockscreen"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SetTitleAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SetTitleAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Set Title"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CcAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CcAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Cc"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="StopSlideShowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="StopSlideshowAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Stop Slideshow"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PermissionsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PermissionsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Permisions"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="HighlightAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="HighlightAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Highlight"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DisableUpdatesAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DisableUpdatesAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Disable Updates"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="UnfavoriteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UnfavoriteAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Unfavorite"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="UnPinAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UnPinAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Unpin"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OpenLocalAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OpenLocalAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Open Loal"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MuteAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MuteAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Mute"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ItalicAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ItalicAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Italic"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="UnderlineAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UnderlineAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Underline"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="BoldAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="BoldAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Bold"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MoveToFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MoveToFolderAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Move to Folder"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="LikeDislikeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="LikeDislikeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Like/Dislike"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DislikeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DislikeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Dislike"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="LikeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="LikeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Like"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AlignRightAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AlignRightAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Align Right"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AlignCenterAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AlignCenterAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Align Center"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AlignLeftAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AlignLeftAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Align Left"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ZoomAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ZoomAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Zoom"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ZoomOutAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ZoomOutAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Zoom Out"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OpenFileAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OpenFileAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Open File"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OtherUserAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OtherUserAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Other User"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AdminAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AdminAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Admin"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="StreetAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="StreetAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Street"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MapAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MapAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Map"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ClearSelectionAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ClearSelectionAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Clear Selection"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FontDecreaseAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FontDecreaseAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Decrease Font"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FontIncreaseAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FontIncreaseAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Increase Font"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FontSizeAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FontSizeAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Font Size"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="CellphoneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CellphoneAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Cellphone"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ReshareAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ReshareAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Reshare"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="TagAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="TagAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Tag"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RepeatOneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RepeatOneAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Repeat Once"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="RepeatAllAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="RepeatAllAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Repeat All"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OutlineStarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OutlineStarAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Outline Star"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SolidStarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SolidStarAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Solid Star"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CalculatorAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CalculatorAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Calculator"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="DirectionsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="DirectionsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Directions"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="TargetAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="TargetAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Target"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="LibraryAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="LibraryAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Library"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PhonebookAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PhonebookAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Phonebook"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MemoAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MemoAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Memo"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="MicrophoneAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="MicrophoneAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Microphone"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="PostUpdateAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="PostUpdateAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Post Update"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="BackToWindowAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="BackToWindowAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Back to Window"/> - <Setter Property="Content" Value=""/> - </Style> - --> - - <!-- - <Style x:Key="FullScreenAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FullScreenAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Full Screen"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="NewFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="NewFolderAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="New Folder"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="CalendarReplyAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="CalendarReplyAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Calendar Reply"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="UnsyncFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="UnsyncFolderAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Unsync Folder"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ReportHackedAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ReportHackedAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Report Hacked"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SyncFolderAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SyncFolderAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Sync Folder"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="BlockContactAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="Block ContactAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="BlockContact"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="SwitchAppsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="SwitchAppsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Switch Apps"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="AddFriendAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="AddFriendAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Add Friend"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="TouchPointerAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="TouchPointerAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Touch Pointer"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="GoToStartAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="GoToStartAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Go to Start"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ZeroBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ZeroBarsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Zero Bars"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="OneBarAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="OneBarAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="One Bar"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="TwoBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="TwoBarsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Two Bars"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="ThreeBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="ThreeBarsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Three Bars"/> - <Setter Property="Content" Value=""/> - </Style> - <Style x:Key="FourBarsAppBarButtonStyle" TargetType="ButtonBase" BasedOn="{StaticResource AppBarButtonStyle}"> - <Setter Property="AutomationProperties.AutomationId" Value="FourBarsAppBarButton"/> - <Setter Property="AutomationProperties.Name" Value="Four Bars"/> - <Setter Property="Content" Value=""/> - </Style> - - --> - - <!-- Title area styles --> - - <Style x:Key="PageHeaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource HeaderTextStyle}"> - <Setter Property="TextWrapping" Value="NoWrap"/> - <Setter Property="VerticalAlignment" Value="Bottom"/> - <Setter Property="Margin" Value="0,0,30,40"/> - </Style> - - <Style x:Key="PageSubheaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource SubheaderTextStyle}"> - <Setter Property="TextWrapping" Value="NoWrap"/> - <Setter Property="VerticalAlignment" Value="Bottom"/> - <Setter Property="Margin" Value="0,0,0,40"/> - </Style> - - <Style x:Key="SnappedPageHeaderTextStyle" TargetType="TextBlock" BasedOn="{StaticResource PageSubheaderTextStyle}"> - <Setter Property="Margin" Value="0,0,18,40"/> - </Style> - - <!-- - BackButtonStyle is used to style a Button for use in the title area of a page. Margins appropriate for - the conventional page layout are included as part of the style. - --> - <Style x:Key="BackButtonStyle" TargetType="Button"> - <Setter Property="MinWidth" Value="0"/> - <Setter Property="Width" Value="48"/> - <Setter Property="Height" Value="48"/> - <Setter Property="Margin" Value="36,0,36,36"/> - <Setter Property="VerticalAlignment" Value="Bottom"/> - <Setter Property="FontFamily" Value="Segoe UI Symbol"/> - <Setter Property="FontWeight" Value="Normal"/> - <Setter Property="FontSize" Value="56"/> - <Setter Property="AutomationProperties.AutomationId" Value="BackButton"/> - <Setter Property="AutomationProperties.Name" Value="Back"/> - <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid x:Name="RootGrid"> - <Grid Margin="-1,-16,0,0"> - <TextBlock x:Name="BackgroundGlyph" Text="" Foreground="{StaticResource BackButtonBackgroundThemeBrush}"/> - <TextBlock x:Name="NormalGlyph" Text="{StaticResource BackButtonGlyph}" Foreground="{StaticResource BackButtonForegroundThemeBrush}"/> - <TextBlock x:Name="ArrowGlyph" Text="" Foreground="{StaticResource BackButtonPressedForegroundThemeBrush}" Opacity="0"/> - </Grid> - <Rectangle - x:Name="FocusVisualWhite" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="1.5"/> - <Rectangle - x:Name="FocusVisualBlack" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="0.5"/> - - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal" /> - <VisualState x:Name="PointerOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverBackgroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NormalGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <DoubleAnimation - Storyboard.TargetName="ArrowGlyph" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - <DoubleAnimation - Storyboard.TargetName="NormalGlyph" - Storyboard.TargetProperty="Opacity" - To="0" - Duration="0"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Visibility"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - <VisualStateGroup x:Name="FocusStates"> - <VisualState x:Name="Focused"> - <Storyboard> - <DoubleAnimation - Storyboard.TargetName="FocusVisualWhite" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - <DoubleAnimation - Storyboard.TargetName="FocusVisualBlack" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Unfocused" /> - <VisualState x:Name="PointerFocused" /> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <!-- - PortraitBackButtonStyle is used to style a Button for use in the title area of a portrait page. Margins appropriate - for the conventional page layout are included as part of the style. - --> - <Style x:Key="PortraitBackButtonStyle" TargetType="Button" BasedOn="{StaticResource BackButtonStyle}"> - <Setter Property="Margin" Value="26,0,26,36"/> - </Style> - - <!-- - SnappedBackButtonStyle is used to style a Button for use in the title area of a snapped page. Margins appropriate - for the conventional page layout are included as part of the style. - - The obvious duplication here is necessary as the glyphs used in snapped are not merely smaller versions of the same - glyph but are actually distinct. - --> - <Style x:Key="SnappedBackButtonStyle" TargetType="Button"> - <Setter Property="MinWidth" Value="0"/> - <Setter Property="Margin" Value="20,0,0,0"/> - <Setter Property="VerticalAlignment" Value="Bottom"/> - <Setter Property="FontFamily" Value="Segoe UI Symbol"/> - <Setter Property="FontWeight" Value="Normal"/> - <Setter Property="FontSize" Value="26.66667"/> - <Setter Property="AutomationProperties.AutomationId" Value="BackButton"/> - <Setter Property="AutomationProperties.Name" Value="Back"/> - <Setter Property="AutomationProperties.ItemType" Value="Navigation Button"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid x:Name="RootGrid" Width="36" Height="36" Margin="-3,0,7,33"> - <Grid Margin="-1,-1,0,0"> - <TextBlock x:Name="BackgroundGlyph" Text="" Foreground="{StaticResource BackButtonBackgroundThemeBrush}"/> - <TextBlock x:Name="NormalGlyph" Text="{StaticResource BackButtonSnappedGlyph}" Foreground="{StaticResource BackButtonForegroundThemeBrush}"/> - <TextBlock x:Name="ArrowGlyph" Text="" Foreground="{StaticResource BackButtonPressedForegroundThemeBrush}" Opacity="0"/> - </Grid> - <Rectangle - x:Name="FocusVisualWhite" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualWhiteStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="1.5"/> - <Rectangle - x:Name="FocusVisualBlack" - IsHitTestVisible="False" - Stroke="{StaticResource FocusVisualBlackStrokeThemeBrush}" - StrokeEndLineCap="Square" - StrokeDashArray="1,1" - Opacity="0" - StrokeDashOffset="0.5"/> - - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal" /> - <VisualState x:Name="PointerOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverBackgroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="NormalGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonPointerOverForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource BackButtonForegroundThemeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <DoubleAnimation - Storyboard.TargetName="ArrowGlyph" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - <DoubleAnimation - Storyboard.TargetName="NormalGlyph" - Storyboard.TargetProperty="Opacity" - To="0" - Duration="0"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RootGrid" Storyboard.TargetProperty="Visibility"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - <VisualStateGroup x:Name="FocusStates"> - <VisualState x:Name="Focused"> - <Storyboard> - <DoubleAnimation - Storyboard.TargetName="FocusVisualWhite" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - <DoubleAnimation - Storyboard.TargetName="FocusVisualBlack" - Storyboard.TargetProperty="Opacity" - To="1" - Duration="0"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Unfocused" /> - <VisualState x:Name="PointerFocused" /> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <!-- Item templates --> - - <!-- Grid-appropriate 250 pixel square item template as seen in the GroupedItemsPage and ItemsPage --> - <DataTemplate x:Key="Standard250x250ItemTemplate"> - <Grid HorizontalAlignment="Left" Width="250" Height="250"> - <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> - <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> - </Border> - <StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}"> - <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="60" Margin="15,0,15,0"/> - <TextBlock Text="{Binding Subtitle}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/> - </StackPanel> - </Grid> - </DataTemplate> - - <!-- Grid-appropriate 500 by 130 pixel item template as seen in the GroupDetailPage --> - <DataTemplate x:Key="Standard500x130ItemTemplate"> - <Grid Height="110" Width="480" Margin="10"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110"> - <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> - </Border> - <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0"> - <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/> - </StackPanel> - </Grid> - </DataTemplate> - - <!-- List-appropriate 130 pixel high item template as seen in the SplitPage --> - <DataTemplate x:Key="Standard130ItemTemplate"> - <Grid Height="110" Margin="6"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="110" Height="110"> - <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> - </Border> - <StackPanel Grid.Column="1" VerticalAlignment="Top" Margin="10,0,0,0"> - <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" MaxHeight="60"/> - </StackPanel> - </Grid> - </DataTemplate> - - <!-- - List-appropriate 80 pixel high item template as seen in the SplitPage when Filled, and - the following pages when snapped: GroupedItemsPage, GroupDetailPage, and ItemsPage - --> - <DataTemplate x:Key="Standard80ItemTemplate"> - <Grid Margin="6"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Width="60" Height="60"> - <Image Source="{Binding Image}" Stretch="UniformToFill"/> - </Border> - <StackPanel Grid.Column="1" Margin="10,0,0,0"> - <TextBlock Text="{Binding Title}" Style="{StaticResource ItemTextStyle}" MaxHeight="40"/> - <TextBlock Text="{Binding Subtitle}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap"/> - </StackPanel> - </Grid> - </DataTemplate> - - <!-- Grid-appropriate 300 by 70 pixel item template as seen in the SearchResultsPage --> - <DataTemplate x:Key="StandardSmallIcon300x70ItemTemplate"> - <Grid Width="294" Margin="6"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,0,0,10" Width="40" Height="40"> - <Image Source="{Binding Image}" Stretch="UniformToFill"/> - </Border> - <StackPanel Grid.Column="1" Margin="10,-10,0,0"> - <TextBlock Text="{Binding Title}" Style="{StaticResource BodyTextStyle}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Subtitle}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> - </StackPanel> - </Grid> - </DataTemplate> - - <!-- List-appropriate 70 pixel high item template as seen in the SearchResultsPage when Snapped --> - <DataTemplate x:Key="StandardSmallIcon70ItemTemplate"> - <Grid Margin="6"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,0,0,10" Width="40" Height="40"> - <Image Source="{Binding Image}" Stretch="UniformToFill"/> - </Border> - <StackPanel Grid.Column="1" Margin="10,-10,0,0"> - <TextBlock Text="{Binding Title}" Style="{StaticResource BodyTextStyle}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Subtitle}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> - <TextBlock Text="{Binding Description}" Style="{StaticResource BodyTextStyle}" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" TextWrapping="NoWrap"/> - </StackPanel> - </Grid> - </DataTemplate> - - <!-- - 190x130 pixel item template for displaying file previews as seen in the FileOpenPickerPage - Includes an elaborate tooltip to display title and description text - --> - <DataTemplate x:Key="StandardFileWithTooltip190x130ItemTemplate"> - <Grid> - <Grid Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> - <Image - Source="{Binding Image}" - Width="190" - Height="130" - HorizontalAlignment="Center" - VerticalAlignment="Center" - Stretch="Uniform"/> - </Grid> - <ToolTipService.Placement>Mouse</ToolTipService.Placement> - <ToolTipService.ToolTip> - <ToolTip> - <ToolTip.Style> - <Style TargetType="ToolTip"> - <Setter Property="BorderBrush" Value="{StaticResource ToolTipBackgroundThemeBrush}" /> - <Setter Property="Padding" Value="0" /> - </Style> - </ToolTip.Style> - - <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto"/> - <ColumnDefinition Width="*"/> - </Grid.ColumnDefinitions> - - <Grid Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="20"> - <Image - Source="{Binding Image}" - Width="160" - Height="160" - HorizontalAlignment="Center" - VerticalAlignment="Center" - Stretch="Uniform"/> - </Grid> - <StackPanel Width="200" Grid.Column="1" Margin="0,20,20,20"> - <TextBlock Text="{Binding Title}" TextWrapping="NoWrap" Style="{StaticResource BodyTextStyle}"/> - <TextBlock Text="{Binding Description}" MaxHeight="140" Foreground="{StaticResource ApplicationSecondaryForegroundThemeBrush}" Style="{StaticResource BodyTextStyle}"/> - </StackPanel> - </Grid> - </ToolTip> - </ToolTipService.ToolTip> - </Grid> - </DataTemplate> - - <!-- ScrollViewer styles --> - - <Style x:Key="HorizontalScrollViewerStyle" TargetType="ScrollViewer"> - <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/> - <Setter Property="VerticalScrollBarVisibility" Value="Disabled"/> - <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Enabled" /> - <Setter Property="ScrollViewer.VerticalScrollMode" Value="Disabled" /> - <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" /> - </Style> - - <Style x:Key="VerticalScrollViewerStyle" TargetType="ScrollViewer"> - <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> - <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> - <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled" /> - <Setter Property="ScrollViewer.VerticalScrollMode" Value="Enabled" /> - <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" /> - </Style> - - <!-- Page layout roots typically use entrance animations and a theme-appropriate background color --> - - <Style x:Key="LayoutRootStyle" TargetType="Panel"> - <Setter Property="Background" Value="{StaticResource ApplicationPageBackgroundThemeBrush}"/> - <Setter Property="ChildrenTransitions"> - <Setter.Value> - <TransitionCollection> - <EntranceThemeTransition/> - </TransitionCollection> - </Setter.Value> - </Setter> - </Style> -</ResourceDictionary> diff --git a/samples/Demo.Win81/Demo.Win81.csproj b/samples/Demo.Win81/Demo.Win81.csproj deleted file mode 100644 index d8217f7..0000000 --- a/samples/Demo.Win81/Demo.Win81.csproj +++ /dev/null @@ -1,163 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{EF1121FE-83A7-4BFC-9754-4C928AAA01B9}</ProjectGuid> - <OutputType>AppContainerExe</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>Demo.Win81</RootNamespace> - <AssemblyName>Demo.Win81</AssemblyName> - <DefaultLanguage>en-US</DefaultLanguage> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{BC8A1FFA-BEE3-4634-8014-F334798102B3};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <PackageCertificateKeyFile>Demo.Win81_TemporaryKey.pfx</PackageCertificateKeyFile> - <TargetPlatformVersion>8.1</TargetPlatformVersion> - <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion> - <TargetFrameworkVersion /> - <PackageCertificateThumbprint>4A9837EC0B45BE9D716CD54AE44F8AEF51E489C8</PackageCertificateThumbprint> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <PlatformTarget>AnyCPU</PlatformTarget> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <PlatformTarget>AnyCPU</PlatformTarget> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE;NETFX_CORE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'"> - <DebugSymbols>true</DebugSymbols> - <OutputPath>bin\ARM\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants> - <NoWarn>;2008</NoWarn> - <DebugType>full</DebugType> - <PlatformTarget>ARM</PlatformTarget> - <UseVSHostingProcess>false</UseVSHostingProcess> - <ErrorReport>prompt</ErrorReport> - <Prefer32Bit>true</Prefer32Bit> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'"> - <OutputPath>bin\ARM\Release\</OutputPath> - <DefineConstants>TRACE;NETFX_CORE</DefineConstants> - <Optimize>true</Optimize> - <NoWarn>;2008</NoWarn> - <DebugType>pdbonly</DebugType> - <PlatformTarget>ARM</PlatformTarget> - <UseVSHostingProcess>false</UseVSHostingProcess> - <ErrorReport>prompt</ErrorReport> - <Prefer32Bit>true</Prefer32Bit> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> - <DebugSymbols>true</DebugSymbols> - <OutputPath>bin\x64\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants> - <NoWarn>;2008</NoWarn> - <DebugType>full</DebugType> - <PlatformTarget>x64</PlatformTarget> - <UseVSHostingProcess>false</UseVSHostingProcess> - <ErrorReport>prompt</ErrorReport> - <Prefer32Bit>true</Prefer32Bit> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> - <OutputPath>bin\x64\Release\</OutputPath> - <DefineConstants>TRACE;NETFX_CORE</DefineConstants> - <Optimize>true</Optimize> - <NoWarn>;2008</NoWarn> - <DebugType>pdbonly</DebugType> - <PlatformTarget>x64</PlatformTarget> - <UseVSHostingProcess>false</UseVSHostingProcess> - <ErrorReport>prompt</ErrorReport> - <Prefer32Bit>true</Prefer32Bit> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> - <DebugSymbols>true</DebugSymbols> - <OutputPath>bin\x86\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE;NETFX_CORE</DefineConstants> - <NoWarn>;2008</NoWarn> - <DebugType>full</DebugType> - <PlatformTarget>x86</PlatformTarget> - <UseVSHostingProcess>false</UseVSHostingProcess> - <ErrorReport>prompt</ErrorReport> - <Prefer32Bit>true</Prefer32Bit> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> - <OutputPath>bin\x86\Release\</OutputPath> - <DefineConstants>TRACE;NETFX_CORE</DefineConstants> - <Optimize>true</Optimize> - <NoWarn>;2008</NoWarn> - <DebugType>pdbonly</DebugType> - <PlatformTarget>x86</PlatformTarget> - <UseVSHostingProcess>false</UseVSHostingProcess> - <ErrorReport>prompt</ErrorReport> - <Prefer32Bit>true</Prefer32Bit> - </PropertyGroup> - <ItemGroup> - <!-- A reference to the entire .Net Framework and Windows SDK are automatically included --> - <ProjectReference Include="..\..\src\Weakly\Weakly.csproj"> - <Project>{aa37f0c0-aa8c-46de-ac8a-db844c9ac556}</Project> - <Name>Weakly</Name> - </ProjectReference> - <ProjectReference Include="..\Demo.Library\Demo.Library.csproj"> - <Project>{ece781c9-3808-46ca-a947-97b1fed9da51}</Project> - <Name>Demo.Library</Name> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <Compile Include="App.xaml.cs"> - <DependentUpon>App.xaml</DependentUpon> - </Compile> - <Compile Include="MainPage.xaml.cs"> - <DependentUpon>MainPage.xaml</DependentUpon> - </Compile> - <Compile Include="Properties\AssemblyInfo.cs" /> - </ItemGroup> - <ItemGroup> - <AppxManifest Include="Package.appxmanifest"> - <SubType>Designer</SubType> - </AppxManifest> - <None Include="Demo.Win81_TemporaryKey.pfx" /> - </ItemGroup> - <ItemGroup> - <Content Include="Assets\Logo.png" /> - <Content Include="Assets\SmallLogo.png" /> - <Content Include="Assets\SplashScreen.png" /> - <Content Include="Assets\StoreLogo.png" /> - </ItemGroup> - <ItemGroup> - <ApplicationDefinition Include="App.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </ApplicationDefinition> - <Page Include="Common\StandardStyles.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Page Include="MainPage.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - </ItemGroup> - <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '12.0' "> - <VisualStudioVersion>12.0</VisualStudioVersion> - </PropertyGroup> - <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> -</Project> \ No newline at end of file diff --git a/samples/Demo.Win81/Demo.Win81_TemporaryKey.pfx b/samples/Demo.Win81/Demo.Win81_TemporaryKey.pfx deleted file mode 100644 index 99d9e41636562a831135445a2af1916848c6c405..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2512 zcmY*ZXH=8f7X4BP1Oe$F(gKP=C<!q1qA>K{n^L3*(n6J>!4R4wigD;5Ql$4FAR>Yk zX@aQKh&1UPf`bJfyieDAGi&Z$=iGhvDfj-l8$&{NLm@B>2}wjCB@+x1zA{7TA^9X^ zFr0)80BK(giH`QK6x{-xL^li4Q=m;CPW`Woi4g+LC&3ReBsdMjk6`>i4Gw34Go%%C z1b7_9mO!EO@8Bf(yNves#t&-rwiwGy9qU}tqq_bOS7D~j`_v-7XVhmS?Ptj|rY-Rj zhUOGPVQIyWs@-@2v*p7)@f$V-VgA`oO<FJ2M{-KowAt9KxKEzhtUOc~|NVT<qqNp8 zQ5MYY`__jo4t>u9d)K`=uI%%%WopN5d2Hbs1zDr%B?j&Cx!r^we`XJHMgGN?m?Krj zDzf{Bbl`6M-BSBXp4(JoqI!C`{2)=Vq~Go>3vM6JNf{^(E{0@0NvpSoI#QLQHa=YT z5We(KU;^zKu=b>KtNMT~mZCEJ`6U^EJs0ugLuGR3*q<>jD#)+I`BilN=$08`3H&(u zq3huIqFpO@OL>t)6BFOgW)S(ZV%E;HFWy%(4tP`|O9?n+-z&PzF)INv<Z>}yHLzeY zid?rp93jq+AR!|RR^%q%x-WK4Z!Y>5*ogkMHzvPbLQgv?7xp50xFo@9WKK?sN^6wp znwcd1*25Au*UZ;aZch)<c)}w`q;XEHX9{!h_(65WB2x2age6&Z;PapHzl}mKaEBFh zxO>!FMFho$H;y)+st7JMa2r(T%*j0s3yuB4wrGxi6<lO;A?N|lCW247kovTt-`RB1 z>#+Juj8JQq^Y!SA@2nHD{0>||(?F}u^!I5$CnhcT=BvyMV|VTw9DDXAAfYtEq~^yP zc+J!)!}^VlPEVT_@i}NVbE1K>4Ta6-ft4+^dnrS2EN5-VslKjpzN#U;rzW>thK8Q5 zmW-t=@%SIqDsS0Zc{P7~9Evx5Q4==y=v4{iYGRW71C8v9@=fZ+9Un;MY|yv}jlr3U zT=rw$Wfimv%3uaRz#@TqXY4n*)*zC7d1S{`lq6!Ognzo144r87c8T5{j`+`^Yhhl* z@_Rik4c_|gyVxDN*`qzD+Tlm$$%><uQfn=$aW{MIH6tWd_Ug$Q6roej)U5rWIAlVi ziWHnpTi~@czqsCbH5=v$J%e$iefFDtbFQ3qN1vS(PX<YD8N;~RH%}g&^BkwdH0V_? z(l<WQ7wMXDe!UXYRaG6UQTwNk5tmK>`a;doT!U)=$4GkZll(fK4i%ARNr@|oLU)`B zI$<K-_}WF%r}GtM@`R7S7i2H4OWJZ0Ly|tOF5N8)#m{7`nlePVhDvz$2chkgOr!l7 zWzijmZv|uOR@T^F0#~-TE6zVqXY4Mbx@yY^Ayn_LSIUa@yfAkl>=#|F!4lM!?$)kK zz$6&vaY3!?1V%gU27zW756vwpf4_siYrkbWqW@fCw`&?PGU?nS_@C|!i7jmSRv@NV zD23jBP^>4ArhhJNXtE*p+Uy3^c1$(T)l0myD#@(t?NQyy4Q)ppGgI}Y{zvPYMl(ik zZGaKur<9)AdFo?(T*uk`kqv<1#chUAedu-%R*`)tK;WeRDHB=MqjhBjr(f^DwK^(t z*YJm_3%2H4>gO!U5S?-*teB!R>c}<+FP6s=l7B;&q?>gkoU1>+;~qnoMhYWW!wulV zsyS^WLHg2)h}v>MmFd_Lt<t<8_-xx3O=DgAV@uhn<KX})Qo(AJ!g<s(WbzU{0>%=4 z)HF*=8!v<eqa1FYJFUl@*ZSUvf5|bxDw2#ULEdSMnn~Ppi`HB^A*(G52wGl@_@;M& zjTypl{4JA6E-V5LhX4S8vHyqU#2N`202n|HPzKz=?G1PUR{?3zV?nF{A_YJRG<guY z11eyh9EiLCMKJFHVhq^#v(ppIDPXQ3kZ1%14k0PAL9iBrW`HT+3zmfdK|m;I-ar^2 z3|NEyCld%<10x*};{hDV1%Yu0I0^^&{OS@0EPmBRfRQJ7WeA1@3;O%z^oV>C%nhV2 zLm>co*#47&{7dQ)Kc!w%Hqvl=j%Vtp)DuZC@%^}02^DKf+{M>fHv(PyxYI3A{tr!` zpYQgxPGq)cXnZHXld_egzk9D*cI1NLV_Z|0TUj+4;3S%*x7?da&;33>Y^;NTB3-?n z34dNtmVgZUPJMou6*oxWbY?VN*>%8s2&azwu2`q>U(fB6yM3{IkB%H~P#<kYF(J8x zif;J6ZyVW8C!o%*Xr)MOTpOEQPuIb}SIEni@R}8s>G2;Bkf>X0(b7RN4ctPo9*us7 zC1)?n&EGEyW?fI_sIdy<K}){-wCZ!X@L^z$UEk1%tvl9i!9|l<G0mxp9ZOuap`za8 z7StO^jBU9S_30nFqWaRCC|?ho26x4$)V&KDrkg0KYJKV2zPm+I4@Q;UhI~ki>g{dw z$yn7@Vr2W2`8MY?GsCn~2H9e;d9fFzVc~HKDf1PU^-eeb597|%E14Pd*!<;qoz(r@ zr`eNx4JTI8BAJJ<9&ZllEu<cFU+Dc!cDTS~&?zYvcu)9+j_?I5hs4v_%L6fs8%6fq zGP0&m_^Cxx+PwpTj;30U>T9b>k0`1Zy6S3mZA1^BTQ+2eJMDC@zbDgToR3Xjwx-qY zVYhA1+a;9P2n}Ch|1HW_!yehw+#J^#u>Uf*EL_Wl@?)akOC)0_i%qGjhUOwierzwf z(lqOt%Bw&KQ}7S?1`BP!p7Kx&rX)btxoBXhy<_CuzDb!L+TpD|<FuP>I3=C5sch}e z=F?G7D1ML&|1_}KN8l=ZsXmb&Hi;Iu)EMx!R{PO5V*TuFqoe`xvgSTQ&Pzx^;4(6N zsGgv+Vaw_wb3o%&rPBOoT`YR_l3t^e7{rIJ`|l@fFCb_EP?IRiIiiX<1Mv^J@e&kW z>>TUfVYXmT&?IhE?9~}5saOu7(QkZ}4jGnTyWtwyFWk7wij|MUyqT3!)0h5o+l};l zxK+MWrK5DO!AcaPl;;(DdJkJ&?{sy9cP?&G`|hMT^~eQ1uUn0eu^c|L=P_qBr!FnS zwtiD|#m+3~&i#90-BtpWahF0|0av`&I<gd+V{+^CxG~2?&C&@*(Y!hb&vRe=ISwSG z11Qm!CdL>wj1Yz%L5F66LHXdEU(m#WOG{Wi&BoF0HePPom5>G#IA?pAbA<u==9UA} V#t!KYdHZ`a=gH5H21?DZ^<N-mVb1^n diff --git a/samples/Demo.Win81/MainPage.xaml b/samples/Demo.Win81/MainPage.xaml deleted file mode 100644 index 89faf66..0000000 --- a/samples/Demo.Win81/MainPage.xaml +++ /dev/null @@ -1,22 +0,0 @@ -<Page - x:Class="Demo.Win8.MainPage" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:local="using:Demo.Win8" - xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d"> - - <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> - <StackPanel> - <Border BorderThickness="1" BorderBrush="Gray"> - <StackPanel> - <TextBlock>Delegate samples</TextBlock> - <TextBlock Margin="0,5" Foreground="Gray" TextWrapping="Wrap">Weakly can call private static and instance methods on Silverlight, by compiling an Expression tree.</TextBlock> - <Button Content="WeakAction and WeakFunc" Click="OnWeakActionAndWeakFunc" /> - <Button Content="DynamicDelegate" Click="OnDynamicDelegate" /> - </StackPanel> - </Border> - </StackPanel> - </Grid> -</Page> diff --git a/samples/Demo.Win81/MainPage.xaml.cs b/samples/Demo.Win81/MainPage.xaml.cs deleted file mode 100644 index 1e74758..0000000 --- a/samples/Demo.Win81/MainPage.xaml.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Threading.Tasks; -using Windows.UI.Popups; -using Demo.Library; -using Weakly; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Navigation; -using Weakly.Builders; - -namespace Demo.Win8 -{ - /// <summary> - /// An empty page that can be used on its own or navigated to within a Frame. - /// </summary> - public sealed partial class MainPage : Page - { - public MainPage() - { - InitializeComponent(); - } - - /// <summary> - /// Invoked when this page is about to be displayed in a Frame. - /// </summary> - /// <param name="e">Event data that describes how this page was reached. The Parameter - /// property is typically used to configure the page.</param> - protected override void OnNavigatedTo(NavigationEventArgs e) - { - } - - private async void OnWeakActionAndWeakFunc(object sender, RoutedEventArgs e) - { - var instance = Activator.CreateInstance(TestRunner.TestMethodsType); - - object resultObject = null; - try - { - var method = TestRunner.GetTestMethod("VoidNoParams"); - var action = new WeakAction(instance, method); - action.Invoke(); - } - catch (Exception ex) - { - resultObject = ex.Message; - } - - await ShowMessageBox(resultObject, "VoidNoParams"); - - try - { - var method = TestRunner.GetTestMethod("IntOneParam"); - var function = new WeakFunc<int, int>(instance, method); - resultObject = function.Invoke(10); - } - catch (Exception ex) - { - resultObject = ex.Message; - } - - await ShowMessageBox(resultObject, "VoidNoParams"); - } - - private async void OnDynamicDelegate(object sender, RoutedEventArgs e) - { - await InvokeDynamicDelegate(null, "StaticVoidNoParams"); - await InvokeDynamicDelegate(null, "StaticIntNoParams"); - await InvokeDynamicDelegate(null, "StaticVoidOneParam", 1); - await InvokeDynamicDelegate(null, "StaticIntOneParam", 2); - - var instance = Activator.CreateInstance(TestRunner.TestMethodsType); - await InvokeDynamicDelegate(instance, "VoidNoParams"); - await InvokeDynamicDelegate(instance, "IntNoParams"); - await InvokeDynamicDelegate(instance, "VoidOneParam", 1); - await InvokeDynamicDelegate(instance, "IntOneParam", 2); - } - - private static async Task InvokeDynamicDelegate(object instance, string methodName, params object[] parameters) - { - object resultObject; - - try - { - var method = TestRunner.GetTestMethod(methodName); - var function = Builder.DynamicDelegate.BuildDynamic(method); - resultObject = function(instance, parameters); - } - catch (Exception ex) - { - resultObject = ex.Message; - } - - await ShowMessageBox(resultObject, methodName); - } - - private static async Task ShowMessageBox(object result, string caption) - { - var message = (result != null) ? result.ToString() : "null"; - - var messageDialog = new MessageDialog(message, caption); - messageDialog.Commands.Add(new UICommand("OK")); - messageDialog.DefaultCommandIndex = 0; - await messageDialog.ShowAsync(); - } - } -} diff --git a/samples/Demo.Win81/Package.appxmanifest b/samples/Demo.Win81/Package.appxmanifest deleted file mode 100644 index f20222a..0000000 --- a/samples/Demo.Win81/Package.appxmanifest +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest"> - <Identity Name="600eefb2-1e33-4a01-83f7-c265f042a508" Publisher="CN=Thomas" Version="1.1.0.0" /> - <Properties> - <DisplayName>Demo.Win8</DisplayName> - <PublisherDisplayName>Thomas Ibel</PublisherDisplayName> - <Logo>Assets\StoreLogo.png</Logo> - </Properties> - <Prerequisites> - <OSMinVersion>6.3.0</OSMinVersion> - <OSMaxVersionTested>6.3.0</OSMaxVersionTested> - </Prerequisites> - <Resources> - <Resource Language="x-generate" /> - </Resources> - <Applications> - <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="Demo.Win8.App"> - <m2:VisualElements DisplayName="Demo.Win8" Description="Demo.Win8" BackgroundColor="#464646" ForegroundText="light" Square150x150Logo="Assets\Logo.png" Square30x30Logo="Assets\SmallLogo.png"> - <m2:DefaultTile> - <m2:ShowNameOnTiles> - <m2:ShowOn Tile="square150x150Logo" /> - </m2:ShowNameOnTiles> - </m2:DefaultTile> - <m2:SplashScreen Image="Assets\SplashScreen.png" /> - </m2:VisualElements> - </Application> - </Applications> - <Capabilities> - <Capability Name="internetClient" /> - </Capabilities> -</Package> \ No newline at end of file diff --git a/samples/Demo.Win81/Properties/AssemblyInfo.cs b/samples/Demo.Win81/Properties/AssemblyInfo.cs deleted file mode 100644 index 1e2c23c..0000000 --- a/samples/Demo.Win81/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Demo.Win8")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Demo.Win8")] -[assembly: AssemblyCopyright("Copyright © 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: ComVisible(false)] \ No newline at end of file diff --git a/samples/Demo.Wpf/App.config b/samples/Demo.Wpf/App.config deleted file mode 100644 index 8e15646..0000000 --- a/samples/Demo.Wpf/App.config +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<configuration> - <startup> - <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> - </startup> -</configuration> \ No newline at end of file diff --git a/samples/Demo.Wpf/App.xaml b/samples/Demo.Wpf/App.xaml deleted file mode 100644 index a8d5d90..0000000 --- a/samples/Demo.Wpf/App.xaml +++ /dev/null @@ -1,8 +0,0 @@ -<Application x:Class="Demo.Wpf.App" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - StartupUri="MainWindow.xaml"> - <Application.Resources> - - </Application.Resources> -</Application> diff --git a/samples/Demo.Wpf/App.xaml.cs b/samples/Demo.Wpf/App.xaml.cs deleted file mode 100644 index b2731f2..0000000 --- a/samples/Demo.Wpf/App.xaml.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Windows; - -namespace Demo.Wpf -{ - /// <summary> - /// Interaction logic for App.xaml - /// </summary> - public partial class App : Application - { - } -} diff --git a/samples/Demo.Wpf/Demo.Wpf.csproj b/samples/Demo.Wpf/Demo.Wpf.csproj deleted file mode 100644 index d8094e4..0000000 --- a/samples/Demo.Wpf/Demo.Wpf.csproj +++ /dev/null @@ -1,114 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> - <PropertyGroup> - <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> - <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProjectGuid>{D29C99D6-1657-41F7-B41D-2BC0ACB48973}</ProjectGuid> - <OutputType>WinExe</OutputType> - <AppDesignerFolder>Properties</AppDesignerFolder> - <RootNamespace>Demo.Wpf</RootNamespace> - <AssemblyName>Demo.Wpf</AssemblyName> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> - <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> - <PlatformTarget>AnyCPU</PlatformTarget> - <DebugSymbols>true</DebugSymbols> - <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>bin\Debug\</OutputPath> - <DefineConstants>DEBUG;TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> - <PlatformTarget>AnyCPU</PlatformTarget> - <DebugType>pdbonly</DebugType> - <Optimize>true</Optimize> - <OutputPath>bin\Release\</OutputPath> - <DefineConstants>TRACE</DefineConstants> - <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - </PropertyGroup> - <ItemGroup> - <Reference Include="System" /> - <Reference Include="System.Data" /> - <Reference Include="System.Xml" /> - <Reference Include="Microsoft.CSharp" /> - <Reference Include="System.Core" /> - <Reference Include="System.Xml.Linq" /> - <Reference Include="System.Data.DataSetExtensions" /> - <Reference Include="System.Xaml"> - <RequiredTargetFramework>4.0</RequiredTargetFramework> - </Reference> - <Reference Include="WindowsBase" /> - <Reference Include="PresentationCore" /> - <Reference Include="PresentationFramework" /> - </ItemGroup> - <ItemGroup> - <ApplicationDefinition Include="App.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </ApplicationDefinition> - <Page Include="MainWindow.xaml"> - <Generator>MSBuild:Compile</Generator> - <SubType>Designer</SubType> - </Page> - <Compile Include="App.xaml.cs"> - <DependentUpon>App.xaml</DependentUpon> - <SubType>Code</SubType> - </Compile> - <Compile Include="MainWindow.xaml.cs"> - <DependentUpon>MainWindow.xaml</DependentUpon> - <SubType>Code</SubType> - </Compile> - </ItemGroup> - <ItemGroup> - <Compile Include="Properties\AssemblyInfo.cs"> - <SubType>Code</SubType> - </Compile> - <Compile Include="Properties\Resources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Resources.resx</DependentUpon> - </Compile> - <Compile Include="Properties\Settings.Designer.cs"> - <AutoGen>True</AutoGen> - <DependentUpon>Settings.settings</DependentUpon> - <DesignTimeSharedInput>True</DesignTimeSharedInput> - </Compile> - <EmbeddedResource Include="Properties\Resources.resx"> - <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.cs</LastGenOutput> - </EmbeddedResource> - <None Include="Properties\Settings.settings"> - <Generator>SettingsSingleFileGenerator</Generator> - <LastGenOutput>Settings.Designer.cs</LastGenOutput> - </None> - <AppDesigner Include="Properties\" /> - </ItemGroup> - <ItemGroup> - <None Include="App.config" /> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\..\src\Weakly\Weakly.csproj"> - <Project>{aa37f0c0-aa8c-46de-ac8a-db844c9ac556}</Project> - <Name>Weakly</Name> - </ProjectReference> - <ProjectReference Include="..\Demo.Library\Demo.Library.csproj"> - <Project>{ece781c9-3808-46ca-a947-97b1fed9da51}</Project> - <Name>Demo.Library</Name> - </ProjectReference> - </ItemGroup> - <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. - Other similar extension points exist, see Microsoft.Common.targets. - <Target Name="BeforeBuild"> - </Target> - <Target Name="AfterBuild"> - </Target> - --> -</Project> \ No newline at end of file diff --git a/samples/Demo.Wpf/MainWindow.xaml b/samples/Demo.Wpf/MainWindow.xaml deleted file mode 100644 index c9fa6fe..0000000 --- a/samples/Demo.Wpf/MainWindow.xaml +++ /dev/null @@ -1,8 +0,0 @@ -<Window x:Class="Demo.Wpf.MainWindow" - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - Title="Demo WPF" Height="350" Width="525"> - <Grid> - - </Grid> -</Window> diff --git a/samples/Demo.Wpf/MainWindow.xaml.cs b/samples/Demo.Wpf/MainWindow.xaml.cs deleted file mode 100644 index 318701a..0000000 --- a/samples/Demo.Wpf/MainWindow.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Windows; - -namespace Demo.Wpf -{ - /// <summary> - /// Interaction logic for MainWindow.xaml - /// </summary> - public partial class MainWindow : Window - { - public MainWindow() - { - InitializeComponent(); - } - } -} diff --git a/samples/Demo.Wpf/Properties/AssemblyInfo.cs b/samples/Demo.Wpf/Properties/AssemblyInfo.cs deleted file mode 100644 index d19761d..0000000 --- a/samples/Demo.Wpf/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Reflection; -using System.Resources; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Windows; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Demo.Wpf")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Demo.Wpf")] -[assembly: AssemblyCopyright("Copyright © 2014")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -//In order to begin building localizable applications, set -//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file -//inside a <PropertyGroup>. For example, if you are using US english -//in your source files, set the <UICulture> to en-US. Then uncomment -//the NeutralResourceLanguage attribute below. Update the "en-US" in -//the line below to match the UICulture setting in the project file. - -//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] - - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] - - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/Demo.Wpf/Properties/Resources.Designer.cs b/samples/Demo.Wpf/Properties/Resources.Designer.cs deleted file mode 100644 index 934f439..0000000 --- a/samples/Demo.Wpf/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.34209 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Demo.Wpf.Properties -{ - - - /// <summary> - /// A strongly-typed resource class, for looking up localized strings, etc. - /// </summary> - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// <summary> - /// Returns the cached ResourceManager instance used by this class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.Wpf.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// <summary> - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// </summary> - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/samples/Demo.Wpf/Properties/Resources.resx b/samples/Demo.Wpf/Properties/Resources.resx deleted file mode 100644 index af7dbeb..0000000 --- a/samples/Demo.Wpf/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<root> - <!-- - Microsoft ResX Schema - - Version 2.0 - - The primary goals of this format is to allow a simple XML format - that is mostly human readable. The generation and parsing of the - various data types are done through the TypeConverter classes - associated with the data types. - - Example: - - ... ado.net/XML headers & schema ... - <resheader name="resmimetype">text/microsoft-resx</resheader> - <resheader name="version">2.0</resheader> - <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> - <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> - <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> - <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> - <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> - <value>[base64 mime encoded serialized .NET Framework object]</value> - </data> - <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> - <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> - <comment>This is a comment</comment> - </data> - - There are any number of "resheader" rows that contain simple - name/value pairs. - - Each data row contains a name, and value. The row also contains a - type or mimetype. Type corresponds to a .NET class that support - text/value conversion through the TypeConverter architecture. - Classes that don't support this are serialized and stored with the - mimetype set. - - The mimetype is used for serialized objects, and tells the - ResXResourceReader how to depersist the object. This is currently not - extensible. For a given mimetype the value must be set accordingly: - - Note - application/x-microsoft.net.object.binary.base64 is the format - that the ResXResourceWriter will generate, however the reader can - read any of the formats listed below. - - mimetype: application/x-microsoft.net.object.binary.base64 - value : The object must be serialized with - : System.Serialization.Formatters.Binary.BinaryFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.soap.base64 - value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Soap.SoapFormatter - : and then encoded with base64 encoding. - - mimetype: application/x-microsoft.net.object.bytearray.base64 - value : The object must be serialized into a byte array - : using a System.ComponentModel.TypeConverter - : and then encoded with base64 encoding. - --> - <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> - <xsd:element name="root" msdata:IsDataSet="true"> - <xsd:complexType> - <xsd:choice maxOccurs="unbounded"> - <xsd:element name="metadata"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" /> - <xsd:attribute name="type" type="xsd:string" /> - <xsd:attribute name="mimetype" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="assembly"> - <xsd:complexType> - <xsd:attribute name="alias" type="xsd:string" /> - <xsd:attribute name="name" type="xsd:string" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="data"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> - <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> - <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> - </xsd:complexType> - </xsd:element> - <xsd:element name="resheader"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> - </xsd:sequence> - <xsd:attribute name="name" type="xsd:string" use="required" /> - </xsd:complexType> - </xsd:element> - </xsd:choice> - </xsd:complexType> - </xsd:element> - </xsd:schema> - <resheader name="resmimetype"> - <value>text/microsoft-resx</value> - </resheader> - <resheader name="version"> - <value>2.0</value> - </resheader> - <resheader name="reader"> - <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> - <resheader name="writer"> - <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> - </resheader> -</root> \ No newline at end of file diff --git a/samples/Demo.Wpf/Properties/Settings.Designer.cs b/samples/Demo.Wpf/Properties/Settings.Designer.cs deleted file mode 100644 index 52a0ccc..0000000 --- a/samples/Demo.Wpf/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// <auto-generated> -// This code was generated by a tool. -// Runtime Version:4.0.30319.34209 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// </auto-generated> -//------------------------------------------------------------------------------ - -namespace Demo.Wpf.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/samples/Demo.Wpf/Properties/Settings.settings b/samples/Demo.Wpf/Properties/Settings.settings deleted file mode 100644 index 033d7a5..0000000 --- a/samples/Demo.Wpf/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version='1.0' encoding='utf-8'?> -<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)"> - <Profiles> - <Profile Name="(Default)" /> - </Profiles> - <Settings /> -</SettingsFile> \ No newline at end of file diff --git a/src/GlobalAssemblyInfo.cs b/src/GlobalAssemblyInfo.cs index f55406b..2f7bb4a 100644 --- a/src/GlobalAssemblyInfo.cs +++ b/src/GlobalAssemblyInfo.cs @@ -5,12 +5,12 @@ [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("https://github.com/tibel/")] [assembly: AssemblyProduct("Weakly")] -[assembly: AssemblyCopyright("Copyright © Thomas Ibel 2013-2014")] +[assembly: AssemblyCopyright("Copyright © Thomas Ibel 2013-2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: NeutralResourcesLanguage("en")] [assembly: CLSCompliant(true)] -[assembly: AssemblyVersion("2.2.0.0")] -[assembly: AssemblyFileVersion("2.2.3.0")] +[assembly: AssemblyVersion("2.4.0.0")] +[assembly: AssemblyFileVersion("2.4.0.0")] diff --git a/src/Weakly/Delegates/DynamicDelegate.cs b/src/Weakly/Delegates/DynamicDelegate.cs deleted file mode 100644 index f1639c4..0000000 --- a/src/Weakly/Delegates/DynamicDelegate.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Reflection; -using Weakly.Builders; - -namespace Weakly -{ - /// <summary> - /// Helper to create dynamic delegate functions. - /// </summary> - [Obsolete("Use Builder.DynamicDelegate")] - public static class DynamicDelegate - { - /// <summary> - /// Create a dynamic delegate from the specified method. - /// </summary> - /// <param name="method">The method.</param> - /// <returns>The dynamic delegate.</returns> - public static Func<object, object[], object> From(MethodInfo method) - { - return Builder.DynamicDelegate.BuildDynamic(method); - } - } -} diff --git a/src/Weakly/Delegates/DynamicEvent.cs b/src/Weakly/Delegates/DynamicEvent.cs deleted file mode 100644 index 7474f99..0000000 --- a/src/Weakly/Delegates/DynamicEvent.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Reflection; - -namespace Weakly -{ - /// <summary> - /// Helper methods to register or unregister an event handler using reflection. - /// </summary> - [Obsolete] - public static class DynamicEvent - { - /// <summary> - /// Gets the method that adds an event handler to an event source. - /// </summary> - /// <param name="eventInfo">The event information.</param> - /// <returns>The method used to add an event handler delegate to the event source.</returns> - public static Action<object, Delegate> GetAddMethod(EventInfo eventInfo) - { - return eventInfo.AddEventHandler; - } - - /// <summary> - /// Gets the method that removes an event handler from an event source. - /// </summary> - /// <param name="eventInfo">The event information.</param> - /// <returns>The method used to remove an event handler delegate from the event source.</returns> - public static Action<object, Delegate> GetRemoveMethod(EventInfo eventInfo) - { - return eventInfo.RemoveEventHandler; - } - } -} diff --git a/src/Weakly/Delegates/DynamicProperty.cs b/src/Weakly/Delegates/DynamicProperty.cs deleted file mode 100644 index 009a916..0000000 --- a/src/Weakly/Delegates/DynamicProperty.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using System.Reflection; -using Weakly.Builders; - -namespace Weakly -{ - /// <summary> - /// Helper to create dynamic (complied) property accessors. - /// </summary> - [Obsolete("Use Builder.PropertyAccessor")] - public static class DynamicProperty - { - /// <summary> - /// Get compiled Getter function from a given <paramref name="property"/>. - /// </summary> - /// <param name="property">The property.</param> - /// <returns>The function to get the property value.</returns> - public static Func<object, object> GetterFrom(PropertyInfo property) - { - return Builder.PropertyAccessor.BuildGetter(property); - } - - /// <summary> - /// Get compiled Setter function from a given <paramref name="property"/>. - /// </summary> - /// <param name="property">The property.</param> - /// <returns>The function to set the property value.</returns> - public static Action<object, object> SetterFrom(PropertyInfo property) - { - return Builder.PropertyAccessor.BuildSetter(property); - } - } -} diff --git a/src/Weakly/Delegates/OpenAction.cs b/src/Weakly/Delegates/OpenAction.cs deleted file mode 100644 index cef827b..0000000 --- a/src/Weakly/Delegates/OpenAction.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Reflection; -using Weakly.Builders; - -namespace Weakly -{ - /// <summary> - /// Helper to create open delegate actions. - /// </summary> - [Obsolete("Use Builder.OpenAction")] - public static class OpenAction - { - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Action<object> From(MethodInfo method) - { - return Builder.OpenAction.BuildAction(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T">The type of the parameter of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Action<object, T> From<T>(MethodInfo method) - { - return Builder.OpenAction.BuildAction<T>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Action<object, T1, T2> From<T1, T2>(MethodInfo method) - { - return Builder.OpenAction.BuildAction<T1, T2>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Action<object, T1, T2, T3> From<T1, T2, T3>(MethodInfo method) - { - return Builder.OpenAction.BuildAction<T1, T2, T3>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Action<object, T1, T2, T3, T4> From<T1, T2, T3, T4>(MethodInfo method) - { - return Builder.OpenAction.BuildAction<T1, T2, T3, T4>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Action<object, T1, T2, T3, T4, T5> From<T1, T2, T3, T4, T5>(MethodInfo method) - { - return Builder.OpenAction.BuildAction<T1, T2, T3, T4, T5>(method); - } - } -} diff --git a/src/Weakly/Delegates/OpenFunc.cs b/src/Weakly/Delegates/OpenFunc.cs deleted file mode 100644 index 5d82fc9..0000000 --- a/src/Weakly/Delegates/OpenFunc.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.Reflection; -using Weakly.Builders; - -namespace Weakly -{ - /// <summary> - /// Helper to create open delegate functions. - /// </summary> - [Obsolete("Use Builder.OpenFunc")] - public static class OpenFunc - { - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Func<object, TResult> From<TResult>(MethodInfo method) - { - return Builder.OpenFunc.BuildFunc<TResult>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T">The type of the parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Func<object, T, TResult> From<T, TResult>(MethodInfo method) - { - return Builder.OpenFunc.BuildFunc<T, TResult>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate.</returns> - public static Func<object, T1, T2, TResult> From<T1, T2, TResult>(MethodInfo method) - { - return Builder.OpenFunc.BuildFunc<T1, T2, TResult>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate</returns> - public static Func<object, T1, T2, T3, TResult> From<T1, T2, T3, TResult>(MethodInfo method) - { - return Builder.OpenFunc.BuildFunc<T1, T2, T3, TResult>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate</returns> - public static Func<object, T1, T2, T3, T4, TResult> From<T1, T2, T3, T4, TResult>(MethodInfo method) - { - return Builder.OpenFunc.BuildFunc<T1, T2, T3, T4, TResult>(method); - } - - /// <summary> - /// Create an open delegate from the specified method. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - /// <param name="method">The method.</param> - /// <returns>The open delegate</returns> - public static Func<object, T1, T2, T3, T4, T5, TResult> From<T1, T2, T3, T4, T5, TResult>(MethodInfo method) - { - return Builder.OpenFunc.BuildFunc<T1, T2, T3, T4, T5, TResult>(method); - } - } -} diff --git a/src/Weakly/Delegates/WeakAction.cs b/src/Weakly/Delegates/WeakAction.cs index d4e989d..cdb1cf2 100644 --- a/src/Weakly/Delegates/WeakAction.cs +++ b/src/Weakly/Delegates/WeakAction.cs @@ -1,31 +1,26 @@ using System; -using System.Reflection; -using Weakly.Builders; namespace Weakly { /// <summary> /// Weak version of <see cref="Action"/> delegate. /// </summary> - public sealed class WeakAction : WeakDelegate + /// <typeparam name="TTarget">The type of the referenced action target.</typeparam> + public sealed class WeakAction<TTarget> + where TTarget : class { - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction"/> class. - /// </summary> - /// <param name="action">The action delegate to encapsulate.</param> - public WeakAction(Action action) - : this(action.Target, action.GetMethodInfo()) - { - } + private readonly WeakReference<TTarget> _target; + private readonly Action<TTarget> _weakAction; /// <summary> - /// Initializes a new instance of the <see cref="WeakAction"/> class. + /// Initializes a new instance of the <see cref="WeakAction<TTarget>"/> class. /// </summary> /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakAction(object target, MethodInfo method) - : base(target, method) + /// <param name="weakAction">The method represented by the delegate.</param> + public WeakAction(TTarget target, Action<TTarget> weakAction) { + _target = new WeakReference<TTarget>(target); + _weakAction = weakAction; } /// <summary> @@ -33,214 +28,11 @@ public WeakAction(object target, MethodInfo method) /// </summary> public void Invoke() { - var target = Target; - if (target != null) - Builder.OpenAction.BuildAction(Method)(target); - } - } - - /// <summary> - /// Weak version of <see cref="Action<T>"/> delegate. - /// </summary> - /// <typeparam name="T">The parameter of the method that this delegate encapsulates.</typeparam> - public sealed class WeakAction<T> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T>"/> class. - /// </summary> - /// <param name="action">The action delegate to encapsulate.</param> - public WeakAction(Action<T> action) - : this(action.Target, action.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakAction(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="obj">The parameter of the method that this delegate encapsulates.</param> - public void Invoke(T obj) - { - var target = Target; - if (target != null) - Builder.OpenAction.BuildAction<T>(Method)(target, obj); - } - } - - /// <summary> - /// Weak version of <see cref="Action<T1, T2>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - public sealed class WeakAction<T1, T2> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2>"/> class. - /// </summary> - /// <param name="action">The action delegate to encapsulate.</param> - public WeakAction(Action<T1, T2> action) - : this(action.Target, action.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakAction(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - public void Invoke(T1 arg1, T2 arg2) - { - var target = Target; - if (target != null) - Builder.OpenAction.BuildAction<T1, T2>(Method)(target, arg1, arg2); - } - } - - /// <summary> - /// Weak version of <see cref="Action<T1, T2, T3>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - public sealed class WeakAction<T1, T2, T3> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2, T3>"/> class. - /// </summary> - /// <param name="action">The action delegate to encapsulate.</param> - public WeakAction(Action<T1, T2, T3> action) - : this(action.Target, action.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2, T3>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakAction(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <param name="arg3">The third parameter of the method that this delegate encapsulates.</param> - public void Invoke(T1 arg1, T2 arg2, T3 arg3) - { - var target = Target; - if (target != null) - Builder.OpenAction.BuildAction<T1, T2, T3>(Method)(target, arg1, arg2, arg3); - } - } - - /// <summary> - /// Weak version of <see cref="Action<T1, T2, T3, T4>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - public sealed class WeakAction<T1, T2, T3, T4> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2, T3, T4>"/> class. - /// </summary> - /// <param name="action">The action delegate to encapsulate.</param> - public WeakAction(Action<T1, T2, T3, T4> action) - : this(action.Target, action.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2, T3, T4>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakAction(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <param name="arg3">The third parameter of the method that this delegate encapsulates.</param> - /// <param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param> - public void Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4) - { - var target = Target; - if (target != null) - Builder.OpenAction.BuildAction<T1, T2, T3, T4>(Method)(target, arg1, arg2, arg3, arg4); - } - } - - /// <summary> - /// Weak version of <see cref="Action<T1, T2, T3, T4, T5>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam> - public sealed class WeakAction<T1, T2, T3, T4, T5> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2, T3, T4, T5>"/> class. - /// </summary> - /// <param name="action">The action delegate to encapsulate.</param> - public WeakAction(Action<T1, T2, T3, T4, T5> action) - : this(action.Target, action.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakAction<T1, T2, T3, T4, T5>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakAction(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <param name="arg3">The third parameter of the method that this delegate encapsulates.</param> - /// <param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param> - /// <param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param> - public void Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) - { - var target = Target; - if (target != null) - Builder.OpenAction.BuildAction<T1, T2, T3, T4, T5>(Method)(target, arg1, arg2, arg3, arg4, arg5); + TTarget target; + if (_target.TryGetTarget(out target)) + { + _weakAction(target); + } } } } diff --git a/src/Weakly/Delegates/WeakDelegate.cs b/src/Weakly/Delegates/WeakDelegate.cs deleted file mode 100644 index b546bee..0000000 --- a/src/Weakly/Delegates/WeakDelegate.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Reflection; - -namespace Weakly -{ - /// <summary> - /// Base class for all weak delegates. - /// </summary> - public abstract class WeakDelegate - { - private readonly WeakReference _instance; - private readonly MethodInfo _method; - - /// <summary> - /// Initializes a new instance of the <see cref="WeakDelegate"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - protected WeakDelegate(object target, MethodInfo method) - { - _instance = new WeakReference(target); - _method = method; - } - - /// <summary> - /// Gets an indication whether the object referenced by the current <see cref="WeakDelegate"/> object has been garbage collected. - /// </summary> - public bool IsAlive - { - get { return _instance.IsAlive; } - } - - /// <summary> - /// Gets the class instance on which the current <see cref="WeakDelegate"/> invokes the instance method. - /// </summary> - public object Target - { - get { return _instance.Target; } - } - - /// <summary> - /// Gets the method represented by this delegate. - /// </summary> - public MethodInfo Method - { - get { return _method; } - } - } -} diff --git a/src/Weakly/Delegates/WeakFunc.cs b/src/Weakly/Delegates/WeakFunc.cs index f3dbdaa..c307819 100644 --- a/src/Weakly/Delegates/WeakFunc.cs +++ b/src/Weakly/Delegates/WeakFunc.cs @@ -1,32 +1,27 @@ -using System; -using System.Reflection; -using Weakly.Builders; +using System; namespace Weakly { /// <summary> /// Weak version of <see cref="Func<TResult>"/> delegate. /// </summary> + /// <typeparam name="TTarget">The type of the referenced function target.</typeparam> /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - public sealed class WeakFunc<TResult> : WeakDelegate + public sealed class WeakFunc<TTarget, TResult> + where TTarget : class { - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<TResult>"/> class. - /// </summary> - /// <param name="function">The function delegate to encapsulate.</param> - public WeakFunc(Func<TResult> function) - : this(function.Target, function.GetMethodInfo()) - { - } + private readonly WeakReference<TTarget> _target; + private readonly Func<TTarget, TResult> _weakFunc; /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<TResult>"/> class. + /// Initializes a new instance of the <see cref="WeakFunc<TTarget, TResult>"/> class. /// </summary> /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakFunc(object target, MethodInfo method) - : base(target, method) + /// <param name="weakFunc">The method represented by the delegate.</param> + public WeakFunc(TTarget target, Func<TTarget, TResult> weakFunc) { + _target = new WeakReference<TTarget>(target); + _weakFunc = weakFunc; } /// <summary> @@ -35,229 +30,12 @@ public WeakFunc(object target, MethodInfo method) /// <returns>The return value of the method that this delegate encapsulates.</returns> public TResult Invoke() { - var target = Target; - if (target != null) - return Builder.OpenFunc.BuildFunc<TResult>(Method)(target); - return default(TResult); - } - } - - /// <summary> - /// Weak version of <see cref="Func<T, TResult>"/> delegate. - /// </summary> - /// <typeparam name="T">The type of the parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - public sealed class WeakFunc<T, TResult> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T, TResult>"/> class. - /// </summary> - /// <param name="function">The function delegate to encapsulate.</param> - public WeakFunc(Func<T, TResult> function) - : this(function.Target, function.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T, TResult>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakFunc(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="obj">The parameter of the method that this delegate encapsulates.</param> - /// <returns>The return value of the method that this delegate encapsulates.</returns> - public TResult Invoke(T obj) - { - var target = Target; - if (target != null) - return Builder.OpenFunc.BuildFunc<T, TResult>(Method)(target, obj); - return default(TResult); - } - } - - /// <summary> - /// Weak version of <see cref="Func<T1, T2, TResult>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - public sealed class WeakFunc<T1, T2, TResult> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, TResult>"/> class. - /// </summary> - /// <param name="function">The function delegate to encapsulate.</param> - public WeakFunc(Func<T1, T2, TResult> function) - : this(function.Target, function.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, TResult>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakFunc(object target, MethodInfo method) - : base(target, method) - { - } + TTarget target; + if (_target.TryGetTarget(out target)) + { + return _weakFunc(target); + } - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <returns>The return value of the method that this delegate encapsulates.</returns> - public TResult Invoke(T1 arg1, T2 arg2) - { - var target = Target; - if (target != null) - return Builder.OpenFunc.BuildFunc<T1, T2, TResult>(Method)(target, arg1, arg2); - return default(TResult); - } - } - - /// <summary> - /// Weak version of <see cref="Func<T1, T2, T3, TResult>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - public sealed class WeakFunc<T1, T2, T3, TResult> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, T3, TResult>"/> class. - /// </summary> - /// <param name="function">The function delegate to encapsulate.</param> - public WeakFunc(Func<T1, T2, T3, TResult> function) - : this(function.Target, function.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, T3, TResult>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakFunc(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <param name="arg3">The third parameter of the method that this delegate encapsulates.</param> - /// <returns>The return value of the method that this delegate encapsulates.</returns> - public TResult Invoke(T1 arg1, T2 arg2, T3 arg3) - { - var target = Target; - if (target != null) - return Builder.OpenFunc.BuildFunc<T1, T2, T3, TResult>(Method)(target, arg1, arg2, arg3); - return default(TResult); - } - } - - /// <summary> - /// Weak version of <see cref="Func<T1, T2, T3, T4, TResult>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - public sealed class WeakFunc<T1, T2, T3, T4, TResult> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, T3, T4, TResult>"/> class. - /// </summary> - /// <param name="function">The function delegate to encapsulate.</param> - public WeakFunc(Func<T1, T2, T3, T4, TResult> function) - : this(function.Target, function.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, T3, T4, TResult>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakFunc(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <param name="arg3">The third parameter of the method that this delegate encapsulates.</param> - /// <param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param> - /// <returns>The return value of the method that this delegate encapsulates.</returns> - public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4) - { - var target = Target; - if (target != null) - return Builder.OpenFunc.BuildFunc<T1, T2, T3, T4, TResult>(Method)(target, arg1, arg2, arg3, arg4); - return default(TResult); - } - } - - /// <summary> - /// Weak version of <see cref="Func<T1, T2, T3, T4, T5, TResult>"/> delegate. - /// </summary> - /// <typeparam name="T1">The type of the first parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T2">The type of the second parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T3">The type of the third parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T4">The type of the fourth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="T5">The type of the fifth parameter of the method that this delegate encapsulates.</typeparam> - /// <typeparam name="TResult">The type of the return value of the method that this delegate encapsulates.</typeparam> - public sealed class WeakFunc<T1, T2, T3, T4, T5, TResult> : WeakDelegate - { - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, T3, T4, T5, TResult>"/> class. - /// </summary> - /// <param name="function">The function delegate to encapsulate.</param> - public WeakFunc(Func<T1, T2, T3, T4, T5, TResult> function) - : this(function.Target, function.GetMethodInfo()) - { - } - - /// <summary> - /// Initializes a new instance of the <see cref="WeakFunc<T1, T2, T3, T4, T5, TResult>"/> class. - /// </summary> - /// <param name="target">The class instance on which the current delegate invokes the instance method.</param> - /// <param name="method">The method represented by the delegate.</param> - public WeakFunc(object target, MethodInfo method) - : base(target, method) - { - } - - /// <summary> - /// Invokes the method represented by the current weak delegate. - /// </summary> - /// <param name="arg1">The first parameter of the method that this delegate encapsulates.</param> - /// <param name="arg2">The second parameter of the method that this delegate encapsulates.</param> - /// <param name="arg3">The third parameter of the method that this delegate encapsulates.</param> - /// <param name="arg4">The fourth parameter of the method that this delegate encapsulates.</param> - /// <param name="arg5">The fifth parameter of the method that this delegate encapsulates.</param> - /// <returns>The return value of the method that this delegate encapsulates.</returns> - public TResult Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5) - { - var target = Target; - if (target != null) - return Builder.OpenFunc.BuildFunc<T1, T2, T3, T4, T5, TResult>(Method)(target, arg1, arg2, arg3, arg4, arg5); return default(TResult); } } diff --git a/src/Weakly/Events/IWeakEventHandler.cs b/src/Weakly/Events/IWeakEventHandler.cs new file mode 100644 index 0000000..051cdfc --- /dev/null +++ b/src/Weakly/Events/IWeakEventHandler.cs @@ -0,0 +1,10 @@ + +namespace Weakly +{ + /// <summary> + /// Marker interface for weak event handlers. + /// </summary> + internal interface IWeakEventHandler + { + } +} diff --git a/src/Weakly/Events/WeakCanExecuteChangedHandler.cs b/src/Weakly/Events/WeakCanExecuteChangedHandler.cs new file mode 100644 index 0000000..1a8d6df --- /dev/null +++ b/src/Weakly/Events/WeakCanExecuteChangedHandler.cs @@ -0,0 +1,22 @@ +using System; +using System.Windows.Input; + +namespace Weakly +{ + internal sealed class WeakCanExecuteChangedHandler<TSubscriber> : + WeakEventHandlerBase<ICommand, TSubscriber, EventArgs> + where TSubscriber : class + { + public WeakCanExecuteChangedHandler(ICommand source, TSubscriber subscriber, + Action<TSubscriber, object, EventArgs> weakHandler) + : base(source, subscriber, weakHandler) + { + source.CanExecuteChanged += OnEvent; + } + + protected override void RemoveEventHandler(ICommand source) + { + source.CanExecuteChanged -= OnEvent; + } + } +} diff --git a/src/Weakly/Events/WeakEventHandler.cs b/src/Weakly/Events/WeakEventHandler.cs index 7259e97..4d9534a 100644 --- a/src/Weakly/Events/WeakEventHandler.cs +++ b/src/Weakly/Events/WeakEventHandler.cs @@ -1,130 +1,42 @@ using System; -using System.Reflection; +using System.ComponentModel; +using System.Windows.Input; namespace Weakly { /// <summary> - /// A weak event handler using reflection to register and unregister. + /// Helper to register weak event handlers. /// </summary> public static class WeakEventHandler { /// <summary> - /// Registers for the specified event without holding a strong reference to the <paramref name="handler"/>. + /// Registers a weak handler to <see cref="INotifyPropertyChanged.PropertyChanged"/>. /// </summary> - /// <typeparam name="TEventArgs">The type of the event arguments.</typeparam> - /// <param name="eventSource">The event source.</param> - /// <param name="eventName">The event name.</param> - /// <param name="handler">The handler to register.</param> + /// <typeparam name="TSubscriber">The type of the event subscriber.</typeparam> + /// <param name="source">The event source.</param> + /// <param name="subscriber">The event subscriber.</param> + /// <param name="weakHandler">The weak handler.</param> /// <returns>A registration object that can be used to deregister from the event.</returns> - public static IDisposable Register<TEventArgs>(object eventSource, string eventName, Action<object, TEventArgs> handler) + public static IDisposable RegisterPropertyChangedWeak<TSubscriber>(this INotifyPropertyChanged source, + TSubscriber subscriber, Action<TSubscriber, object, PropertyChangedEventArgs> weakHandler) + where TSubscriber : class { - if (eventSource == null) - throw new ArgumentNullException("eventSource"); - if (string.IsNullOrEmpty(eventName)) - throw new ArgumentNullException("eventName"); - - var eventInfo = eventSource.GetType().GetRuntimeEvent(eventName); - return Register(eventSource, eventInfo, handler); - } - - /// <summary> - /// Registers for the specified static event without holding a strong reference to the <paramref name="handler"/>. - /// </summary> - /// <typeparam name="TEventArgs">The type of the event arguments.</typeparam> - /// <param name="sourceType">The event source type.</param> - /// <param name="eventName">The event name.</param> - /// <param name="handler">The handler to register.</param> - /// <returns>A registration object that can be used to deregister from the event.</returns> - public static IDisposable Register<TEventArgs>(Type sourceType, string eventName, Action<object, TEventArgs> handler) - { - if (sourceType == null) - throw new ArgumentNullException("sourceType"); - if (string.IsNullOrEmpty(eventName)) - throw new ArgumentNullException("eventName"); - - var eventInfo = sourceType.GetRuntimeEvent(eventName); - return Register(null, eventInfo, handler); + return new WeakNotifyPropertyChangedHandler<TSubscriber>(source, subscriber, weakHandler); } /// <summary> - /// Registers for the specified event without holding a strong reference to the <paramref name="handler"/>. + /// Registers a weak event handler to <see cref="ICommand.CanExecuteChanged"/>. /// </summary> - /// <typeparam name="TEventArgs">The type of the event arguments.</typeparam> - /// <param name="eventSource">The event source.</param> - /// <param name="eventInfo">The event information.</param> - /// <param name="handler">The handler to register.</param> + /// <typeparam name="TSubscriber">The type of the event subscriber.</typeparam> + /// <param name="source">The event source.</param> + /// <param name="subscriber">The event subscriber.</param> + /// <param name="weakHandler">The weak handler.</param> /// <returns>A registration object that can be used to deregister from the event.</returns> - public static IDisposable Register<TEventArgs>(object eventSource, EventInfo eventInfo, Action<object, TEventArgs> handler) + public static IDisposable RegisterCanExecuteChangedWeak<TSubscriber>(this ICommand source, + TSubscriber subscriber, Action<TSubscriber, object, EventArgs> weakHandler) + where TSubscriber : class { - if (eventInfo == null) - throw new ArgumentNullException("eventInfo"); - if (handler == null) - throw new ArgumentNullException("handler"); - if (handler.Target == null) - throw new ArgumentException("Handler delegate must point to instance method.", "handler"); - - if (eventInfo.EventHandlerType.IsWindowsRuntimeType()) - throw new ArgumentException("Windows Runtime events are not supported.", "eventInfo"); - - var isStatic = eventInfo.AddMethod.IsStatic; - if (!isStatic && eventSource == null) - throw new ArgumentNullException("eventSource"); - if (isStatic && eventSource != null) - throw new ArgumentException("Event source for static event has to be null.", "eventSource"); - - return new WeakEventHandlerImpl<TEventArgs>(eventSource, eventInfo, handler); + return new WeakCanExecuteChangedHandler<TSubscriber>(source, subscriber, weakHandler); } - - #region Inner Types - - private sealed class WeakEventHandlerImpl<TEventArgs> : IDisposable - { - private readonly WeakReference _source; - private readonly EventInfo _eventInfo; - private readonly WeakAction<object, TEventArgs> _handler; - private readonly Delegate _eventHandler; - private bool _disposed; - - public WeakEventHandlerImpl(object eventSource, EventInfo eventInfo, Action<object, TEventArgs> handler) - { - if (eventSource != null) - _source = new WeakReference(eventSource); - - _eventInfo = eventInfo; - _handler = new WeakAction<object, TEventArgs>(handler); - - // create correct delegate type - _eventHandler = new Action<object, TEventArgs>(Invoke) - .GetMethodInfo() - .CreateDelegate(eventInfo.EventHandlerType, this); - - // register weak handler - _eventInfo.AddEventHandler(eventSource, _eventHandler); - } - - private void Invoke(object sender, TEventArgs args) - { - if (_handler.IsAlive) - _handler.Invoke(sender, args); - else - Dispose(); - } - - public void Dispose() - { - if (_disposed) - return; - - var isStatic = (_source == null); - var eventSource = !isStatic ? _source.Target : null; - if (!isStatic && eventSource == null) - return; - - _eventInfo.RemoveEventHandler(eventSource, _eventHandler); - _disposed = true; - } - } - - #endregion } } diff --git a/src/Weakly/Events/WeakEventHandlerBase.cs b/src/Weakly/Events/WeakEventHandlerBase.cs new file mode 100644 index 0000000..255f468 --- /dev/null +++ b/src/Weakly/Events/WeakEventHandlerBase.cs @@ -0,0 +1,146 @@ +using System; +using System.Reflection; + +namespace Weakly +{ + /// <summary> + /// Base class for weak event handler. + /// </summary> + /// <typeparam name="TSubscriber">The type of the event subscriber.</typeparam> + /// <typeparam name="TEventArgs">The type of the event arguments.</typeparam> + public abstract class WeakEventHandlerBase<TSubscriber, TEventArgs> : IWeakEventHandler + where TSubscriber : class + { + private readonly WeakReference<TSubscriber> _subscriber; + private readonly Action<TSubscriber, object, TEventArgs> _weakHandler; + + /// <summary> + /// Initializes a new instance of the <see cref="WeakEventHandlerBase<TSubscriber, TEventArgs>"/> class. + /// </summary> + /// <param name="subscriber">The event subscriber.</param> + /// <param name="weakHandler">The weak handler.</param> + protected WeakEventHandlerBase(TSubscriber subscriber, Action<TSubscriber, object, TEventArgs> weakHandler) + { + if (subscriber == null) + throw new ArgumentNullException("subscriber"); + if (weakHandler == null) + throw new ArgumentNullException("weakHandler"); + if (weakHandler.GetMethodInfo().IsClosure()) + throw new ArgumentException("Cannot create weak event handler from closure.", "weakHandler"); + + _subscriber = new WeakReference<TSubscriber>(subscriber); + _weakHandler = weakHandler; + } + + /// <summary> + /// Removes the event handler from the event source. + /// </summary> + protected abstract void RemoveEventHandler(); + + /// <summary> + /// Method called when the event is raised. + /// </summary> + /// <param name="sender">The sender.</param> + /// <param name="args">The <typeparamref name="TEventArgs"/> instance containing the event data.</param> + /// <remarks>Register this method on the source event.</remarks> + protected void OnEvent(object sender, TEventArgs args) + { + TSubscriber subscriber; + if (_subscriber.TryGetTarget(out subscriber)) + { + _weakHandler(subscriber, sender, args); + } + else + { + RemoveEventHandler(); + } + } + + /// <summary> + /// Unregisters the event handler from the event source. + /// </summary> + public void Dispose() + { + RemoveEventHandler(); + } + } + + /// <summary> + /// Base class for weak event handler. + /// </summary> + /// <typeparam name="TSource">The type of the event source.</typeparam> + /// <typeparam name="TSubscriber">The type of the event subscriber.</typeparam> + /// <typeparam name="TEventArgs">The type of the event arguments.</typeparam> + public abstract class WeakEventHandlerBase<TSource, TSubscriber, TEventArgs> : IWeakEventHandler, IDisposable + where TSource : class + where TSubscriber : class + { + private readonly WeakReference<TSource> _source; + private readonly WeakReference<TSubscriber> _subscriber; + private readonly Action<TSubscriber, object, TEventArgs> _weakHandler; + + /// <summary> + /// Initializes a new instance of the <see cref="WeakEventHandlerBase<TSubscriber, TEventArgs>"/> class. + /// </summary> + /// <param name="source">The event source.</param> + /// <param name="subscriber">The event subscriber.</param> + /// <param name="weakHandler">The weak handler.</param> + protected WeakEventHandlerBase(TSource source, TSubscriber subscriber, Action<TSubscriber, object, TEventArgs> weakHandler) + { + if (source == null) + throw new ArgumentNullException("source"); + if (subscriber == null) + throw new ArgumentNullException("subscriber"); + if (weakHandler == null) + throw new ArgumentNullException("weakHandler"); + if (weakHandler.GetMethodInfo().IsClosure()) + throw new ArgumentException("Cannot create weak event handler from closure.", "weakHandler"); + + _source = new WeakReference<TSource>(source); + _subscriber = new WeakReference<TSubscriber>(subscriber); + _weakHandler = weakHandler; + } + + private void RemoveEventHandler() + { + TSource source; + if (_source.TryGetTarget(out source)) + { + RemoveEventHandler(source); + } + } + + /// <summary> + /// Removes the event handler from the event source. + /// </summary> + /// <param name="source">The event source.</param> + protected abstract void RemoveEventHandler(TSource source); + + /// <summary> + /// Method called when the event is raised. + /// </summary> + /// <param name="sender">The sender.</param> + /// <param name="args">The <typeparamref name="TEventArgs"/> instance containing the event data.</param> + /// <remarks>Register this method on the source event.</remarks> + protected void OnEvent(object sender, TEventArgs args) + { + TSubscriber subscriber; + if (_subscriber.TryGetTarget(out subscriber)) + { + _weakHandler(subscriber, sender, args); + } + else + { + RemoveEventHandler(); + } + } + + /// <summary> + /// Unregisters the event handler from the event source. + /// </summary> + public void Dispose() + { + RemoveEventHandler(); + } + } +} diff --git a/src/Weakly/Events/WeakEventSource.cs b/src/Weakly/Events/WeakEventSource.cs index 2a45269..c5c9e3a 100644 --- a/src/Weakly/Events/WeakEventSource.cs +++ b/src/Weakly/Events/WeakEventSource.cs @@ -10,24 +10,16 @@ namespace Weakly /// <typeparam name="TEventArgs">The type of the event data generated by the event.</typeparam> public abstract class WeakEventSourceBase<TEventArgs> { - private readonly List<WeakAction<object, TEventArgs>> _eventHandlerEntries = new List<WeakAction<object, TEventArgs>>(); + private readonly List<Handler> _eventHandlerEntries = new List<Handler>(); private readonly WeakReference _gcSentinel = new WeakReference(new object()); - #region Cleanup handling - - private bool IsCleanupNeeded() + private void CleanIfNeeded() { - if (_gcSentinel.Target == null) - { - _gcSentinel.Target = new object(); - return true; - } + if (_gcSentinel.IsAlive) + return; - return false; - } + _gcSentinel.Target = new object(); - private void CleanAbandonedItems() - { for (var i = _eventHandlerEntries.Count - 1; i >= 0; i--) { var entry = _eventHandlerEntries[i]; @@ -36,16 +28,6 @@ private void CleanAbandonedItems() } } - private void CleanIfNeeded() - { - if (IsCleanupNeeded()) - { - CleanAbandonedItems(); - } - } - - #endregion - /// <summary> /// Adds the specified event handler. /// </summary> @@ -61,7 +43,7 @@ protected void Add(Delegate eventHandler) lock (_eventHandlerEntries) { CleanIfNeeded(); - _eventHandlerEntries.Add(new WeakAction<object, TEventArgs>(eventHandler.Target, eventHandler.GetMethodInfo())); + _eventHandlerEntries.Add(new Handler(eventHandler.Target, eventHandler.GetMethodInfo())); } } @@ -98,7 +80,7 @@ protected void Remove(Delegate eventHandler) /// <param name="e">An object that contains the event data.</param> public void Raise(object sender, TEventArgs e) { - WeakAction<object, TEventArgs>[] invocationList; + Handler[] invocationList; lock (_eventHandlerEntries) { CleanIfNeeded(); @@ -119,6 +101,44 @@ public void Raise(object sender, TEventArgs e) /// <param name="sender">The source of the event.</param> /// <param name="e">An object that contains the event data.</param> protected abstract void OnRaise(object sender, TEventArgs e); + + #region Private class + + private sealed class Handler + { + private readonly WeakReference _instance; + private readonly MethodInfo _method; + + public Handler(object target, MethodInfo method) + { + _instance = new WeakReference(target); + _method = method; + } + + public bool IsAlive + { + get { return _instance.IsAlive; } + } + + public object Target + { + get { return _instance.Target; } + } + + public MethodInfo Method + { + get { return _method; } + } + + public void Invoke(object sender, TEventArgs args) + { + var target = Target; + if (target != null) + Builders.Builder.OpenAction.BuildAction<object, TEventArgs>(Method)(target, sender, args); + } + } + + #endregion } /// <summary> @@ -135,7 +155,7 @@ public sealed class WeakEventSource : WeakEventSourceBase<EventArgs> public void Add(EventHandler eventHandler) { if (eventHandler == null) return; - if (eventHandler.Target == null) + if (eventHandler.Target == null || eventHandler.Target is IWeakEventHandler) { _staticEventHandlers += eventHandler; return; @@ -151,7 +171,7 @@ public void Add(EventHandler eventHandler) public void Remove(EventHandler eventHandler) { if (eventHandler == null) return; - if (eventHandler.Target == null) + if (eventHandler.Target == null || eventHandler.Target is IWeakEventHandler) { _staticEventHandlers -= eventHandler; return; @@ -191,7 +211,7 @@ public sealed class WeakEventSource<TEventArgs> : WeakEventSourceBase<TEventArgs public void Add(EventHandler<TEventArgs> eventHandler) { if (eventHandler == null) return; - if (eventHandler.Target == null) + if (eventHandler.Target == null || eventHandler.Target is IWeakEventHandler) { _staticEventHandlers += eventHandler; return; @@ -207,7 +227,7 @@ public void Add(EventHandler<TEventArgs> eventHandler) public void Remove(EventHandler<TEventArgs> eventHandler) { if (eventHandler == null) return; - if (eventHandler.Target == null) + if (eventHandler.Target == null || eventHandler.Target is IWeakEventHandler) { _staticEventHandlers -= eventHandler; return; diff --git a/src/Weakly/Events/WeakNotifyPropertyChangedHandler.cs b/src/Weakly/Events/WeakNotifyPropertyChangedHandler.cs new file mode 100644 index 0000000..ea72358 --- /dev/null +++ b/src/Weakly/Events/WeakNotifyPropertyChangedHandler.cs @@ -0,0 +1,22 @@ +using System; +using System.ComponentModel; + +namespace Weakly +{ + internal sealed class WeakNotifyPropertyChangedHandler<TSubscriber> : + WeakEventHandlerBase<INotifyPropertyChanged, TSubscriber, PropertyChangedEventArgs> + where TSubscriber : class + { + public WeakNotifyPropertyChangedHandler(INotifyPropertyChanged source, TSubscriber subscriber, + Action<TSubscriber, object, PropertyChangedEventArgs> weakHandler) + : base(source, subscriber, weakHandler) + { + source.PropertyChanged += OnEvent; + } + + protected override void RemoveEventHandler(INotifyPropertyChanged source) + { + source.PropertyChanged -= OnEvent; + } + } +} diff --git a/src/Weakly/Weakly.csproj b/src/Weakly/Weakly.csproj index 263cddc..0bf87f0 100644 --- a/src/Weakly/Weakly.csproj +++ b/src/Weakly/Weakly.csproj @@ -73,21 +73,19 @@ <Compile Include="Builders\ExpressionOpenFuncBuilder.cs" /> <Compile Include="Builders\IOpenActionBuilder.cs" /> <Compile Include="Builders\IOpenFuncBuilder.cs" /> - <Compile Include="Delegates\DynamicEvent.cs" /> + <Compile Include="Delegates\WeakFunc.cs" /> + <Compile Include="Events\IWeakEventHandler.cs" /> + <Compile Include="Delegates\WeakAction.cs" /> + <Compile Include="Events\WeakCanExecuteChangedHandler.cs" /> + <Compile Include="Events\WeakEventHandlerBase.cs" /> + <Compile Include="Events\WeakEventHandler.cs" /> + <Compile Include="Events\WeakNotifyPropertyChangedHandler.cs" /> <Compile Include="Reflection\ManagedRuntime.cs" /> <Compile Include="Reflection\ReflectionHelper.cs" /> - <Compile Include="Delegates\DynamicDelegate.cs" /> - <Compile Include="Delegates\OpenAction.cs" /> - <Compile Include="Delegates\OpenFunc.cs" /> - <Compile Include="Delegates\WeakDelegate.cs" /> - <Compile Include="Delegates\DynamicProperty.cs" /> - <Compile Include="Events\WeakEventHandler.cs" /> <Compile Include="Expressions\ExpressionHelper.cs" /> <Compile Include="IO\MemoryTributary.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Delegates\WeakAction.cs" /> <Compile Include="Events\WeakEventSource.cs" /> - <Compile Include="Delegates\WeakFunc.cs" /> <Compile Include="Reflection\ReflectionPath.cs" /> <Compile Include="Reflection\ManagedRuntimeType.cs" /> <Compile Include="Tasks\FaultedTaskEventArgs.cs" /> diff --git a/src/Weakly/Weakly.csproj.DotSettings b/src/Weakly/Weakly.csproj.DotSettings index 4ddd9a5..551bfc8 100644 --- a/src/Weakly/Weakly.csproj.DotSettings +++ b/src/Weakly/Weakly.csproj.DotSettings @@ -1,13 +1,8 @@ <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Builder/@EntryIndexedValue">False</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Collections/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Delegates/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Events/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Expression/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Expressions/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=IO/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=MVVM_005CCoroutines/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=MVVM_005CEventAggregator/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=MVVM_005CValidation/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Reflection/@EntryIndexedValue">True</s:Boolean> - <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=Tasks/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> \ No newline at end of file + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=collections/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=delegates/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=events/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=expressions/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=io/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=reflection/@EntryIndexedValue">True</s:Boolean> + <s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=tasks/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> \ No newline at end of file