[update] 變更項目結構
This commit is contained in:
parent
06abccb9f7
commit
9ef07b8595
79
.github/workflows/dotnet-desktop.yml
vendored
79
.github/workflows/dotnet-desktop.yml
vendored
@ -1,79 +0,0 @@
|
|||||||
name: .NET Build
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
build:
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v3.5.2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# 安装 .NET Core
|
|
||||||
- name: Install .NET Core
|
|
||||||
uses: actions/setup-dotnet@v3.0.3
|
|
||||||
with:
|
|
||||||
dotnet-version: '6.0.x'
|
|
||||||
|
|
||||||
# 安装 NuGet
|
|
||||||
- name: Setup NuGet
|
|
||||||
uses: NuGet/setup-nuget@v1.2.0
|
|
||||||
with:
|
|
||||||
nuget-version: '5.x'
|
|
||||||
|
|
||||||
# 还原 NuGet 包
|
|
||||||
- name: NuGet restore
|
|
||||||
run: nuget restore
|
|
||||||
|
|
||||||
# 添加 MSBuild.exe 到环境变量: https://github.com/microsoft/setup-msbuild
|
|
||||||
- name: Add msbuild to PATH
|
|
||||||
uses: microsoft/setup-msbuild@v1.3.1
|
|
||||||
|
|
||||||
# 编译整个项目
|
|
||||||
- name: Build the solution
|
|
||||||
run: |
|
|
||||||
msbuild -t:restore /p:GitFlow="Github Action"
|
|
||||||
msbuild -target:"Ink Canvas" /p:Configuration=Release /p:Platform="Any CPU" /p:GitFlow="Github Action"
|
|
||||||
env:
|
|
||||||
Configuration: ${{ matrix.configuration }}
|
|
||||||
|
|
||||||
- name: Build the solution (x64)
|
|
||||||
run: |
|
|
||||||
msbuild -t:restore /p:GitFlow="Github Action"
|
|
||||||
msbuild -target:"Ink Canvas" /p:Configuration=Release /p:Platform="x64" /p:GitFlow="Github Action"
|
|
||||||
env:
|
|
||||||
Configuration: ${{ matrix.configuration }}
|
|
||||||
|
|
||||||
- name: Build the solution (ARM64)
|
|
||||||
run: |
|
|
||||||
msbuild -t:restore /p:GitFlow="Github Action"
|
|
||||||
msbuild -target:"Ink Canvas" /p:Configuration=Release /p:Platform="ARM64" /p:GitFlow="Github Action"
|
|
||||||
env:
|
|
||||||
Configuration: ${{ matrix.configuration }}
|
|
||||||
|
|
||||||
# 上传编译成品
|
|
||||||
- name: Upload to artifact
|
|
||||||
uses: actions/upload-artifact@main
|
|
||||||
with:
|
|
||||||
name: Ink Canvas Annotation
|
|
||||||
path: Ink-Canvas-For-Annotation/bin/Release
|
|
||||||
|
|
||||||
- name: Upload to artifact (x64)
|
|
||||||
uses: actions/upload-artifact@main
|
|
||||||
with:
|
|
||||||
name: Ink Canvas Annotation-x64
|
|
||||||
path: Ink-Canvas-For-Annotation/bin/x64/Release
|
|
||||||
|
|
||||||
- name: Upload to artifact (ARM64)
|
|
||||||
uses: actions/upload-artifact@main
|
|
||||||
with:
|
|
||||||
name: Ink Canvas Annotation-ARM64
|
|
||||||
path: Ink-Canvas-For-Annotation/bin/ARM64/Release
|
|
13
.idea/.idea.Ink Canvas/.idea/.gitignore
vendored
13
.idea/.idea.Ink Canvas/.idea/.gitignore
vendored
@ -1,13 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Rider ignored files
|
|
||||||
/projectSettingsUpdater.xml
|
|
||||||
/modules.xml
|
|
||||||
/contentModel.xml
|
|
||||||
/.idea.Ink Canvas.iml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
@ -1 +0,0 @@
|
|||||||
Ink Canvas
|
|
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
|
||||||
</project>
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="UserContentModel">
|
|
||||||
<attachedFolders />
|
|
||||||
<explicitIncludes />
|
|
||||||
<explicitExcludes />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
6
CvtePaintDemo/App.config
Normal file
6
CvtePaintDemo/App.config
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
9
CvtePaintDemo/App.xaml
Normal file
9
CvtePaintDemo/App.xaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<Application x:Class="CvtePaintDemo.App"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="clr-namespace:CvtePaintDemo"
|
||||||
|
StartupUri="MainWindow.xaml">
|
||||||
|
<Application.Resources>
|
||||||
|
|
||||||
|
</Application.Resources>
|
||||||
|
</Application>
|
17
CvtePaintDemo/App.xaml.cs
Normal file
17
CvtePaintDemo/App.xaml.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Configuration;
|
||||||
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace CvtePaintDemo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// App.xaml 的交互逻辑
|
||||||
|
/// </summary>
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
98
CvtePaintDemo/CvtePaintDemo.csproj
Normal file
98
CvtePaintDemo/CvtePaintDemo.csproj
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" 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>{26F0E9DD-A9DC-45D1-97B9-337C63863837}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>CvtePaintDemo</RootNamespace>
|
||||||
|
<AssemblyName>CvtePaintDemo</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
</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.Net.Http" />
|
||||||
|
<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>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
12
CvtePaintDemo/MainWindow.xaml
Normal file
12
CvtePaintDemo/MainWindow.xaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<Window x:Class="CvtePaintDemo.MainWindow"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:CvtePaintDemo"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="MainWindow" Height="450" Width="800">
|
||||||
|
<Grid>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
28
CvtePaintDemo/MainWindow.xaml.cs
Normal file
28
CvtePaintDemo/MainWindow.xaml.cs
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
|
||||||
|
namespace CvtePaintDemo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// MainWindow.xaml 的交互逻辑
|
||||||
|
/// </summary>
|
||||||
|
public partial class MainWindow : Window
|
||||||
|
{
|
||||||
|
public MainWindow()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
55
CvtePaintDemo/Properties/AssemblyInfo.cs
Normal file
55
CvtePaintDemo/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Resources;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
// 有关程序集的一般信息由以下
|
||||||
|
// 控制。更改这些特性值可修改
|
||||||
|
// 与程序集关联的信息。
|
||||||
|
[assembly: AssemblyTitle("CvtePaintDemo")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("CvtePaintDemo")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// 将 ComVisible 设置为 false 会使此程序集中的类型
|
||||||
|
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
|
||||||
|
//请将此类型的 ComVisible 特性设置为 true。
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
//若要开始生成可本地化的应用程序,请设置
|
||||||
|
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
|
||||||
|
//在 <PropertyGroup> 中。例如,如果你使用的是美国英语。
|
||||||
|
//使用的是美国英语,请将 <UICulture> 设置为 en-US。 然后取消
|
||||||
|
//对以下 NeutralResourceLanguage 特性的注释。 更新
|
||||||
|
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
|
||||||
|
|
||||||
|
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
||||||
|
|
||||||
|
|
||||||
|
[assembly: ThemeInfo(
|
||||||
|
ResourceDictionaryLocation.None, //主题特定资源词典所处位置
|
||||||
|
//(未在页面中找到资源时使用,
|
||||||
|
//或应用程序资源字典中找到时使用)
|
||||||
|
ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
|
||||||
|
//(未在页面中找到资源时使用,
|
||||||
|
//、应用程序或任何主题专用资源字典中找到时使用)
|
||||||
|
)]
|
||||||
|
|
||||||
|
|
||||||
|
// 程序集的版本信息由下列四个值组成:
|
||||||
|
//
|
||||||
|
// 主版本
|
||||||
|
// 次版本
|
||||||
|
// 生成号
|
||||||
|
// 修订号
|
||||||
|
//
|
||||||
|
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
||||||
|
//通过使用 "*",如下所示:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
71
CvtePaintDemo/Properties/Resources.Designer.cs
generated
Normal file
71
CvtePaintDemo/Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// 此代码由工具生成。
|
||||||
|
// 运行时版本: 4.0.30319.42000
|
||||||
|
//
|
||||||
|
// 对此文件的更改可能导致不正确的行为,如果
|
||||||
|
// 重新生成代码,则所做更改将丢失。
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace CvtePaintDemo.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 强类型资源类,用于查找本地化字符串等。
|
||||||
|
/// </summary>
|
||||||
|
// 此类是由 StronglyTypedResourceBuilder
|
||||||
|
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||||
|
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||||
|
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||||
|
[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>
|
||||||
|
/// 返回此类使用的缓存 ResourceManager 实例。
|
||||||
|
/// </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("CvtePaintDemo.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 重写当前线程的 CurrentUICulture 属性,对
|
||||||
|
/// 使用此强类型资源类的所有资源查找执行重写。
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
117
CvtePaintDemo/Properties/Resources.resx
Normal file
117
CvtePaintDemo/Properties/Resources.resx
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?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>
|
30
CvtePaintDemo/Properties/Settings.Designer.cs
generated
Normal file
30
CvtePaintDemo/Properties/Settings.Designer.cs
generated
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace CvtePaintDemo.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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
// <autogenerated />
|
||||||
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
70
CvtePaintDemo/obj/Release/App.g.cs
Normal file
70
CvtePaintDemo/obj/Release/App.g.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "9F6932334DB5EB891E816FE68DD54A4FC7B6222F79ECB5D3EADDA3602344DEEC"
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// 此代码由工具生成。
|
||||||
|
// 运行时版本:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||||
|
// 重新生成代码,这些更改将会丢失。
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using CvtePaintDemo;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Automation;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Ink;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Markup;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows.Media.Effects;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Media.Media3D;
|
||||||
|
using System.Windows.Media.TextFormatting;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
using System.Windows.Shell;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CvtePaintDemo {
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// App
|
||||||
|
/// </summary>
|
||||||
|
public partial class App : System.Windows.Application {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// InitializeComponent
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
public void InitializeComponent() {
|
||||||
|
|
||||||
|
#line 5 "..\..\App.xaml"
|
||||||
|
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Application Entry Point.
|
||||||
|
/// </summary>
|
||||||
|
[System.STAThreadAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
public static void Main() {
|
||||||
|
CvtePaintDemo.App app = new CvtePaintDemo.App();
|
||||||
|
app.InitializeComponent();
|
||||||
|
app.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
70
CvtePaintDemo/obj/Release/App.g.i.cs
Normal file
70
CvtePaintDemo/obj/Release/App.g.i.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "9F6932334DB5EB891E816FE68DD54A4FC7B6222F79ECB5D3EADDA3602344DEEC"
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// 此代码由工具生成。
|
||||||
|
// 运行时版本:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||||
|
// 重新生成代码,这些更改将会丢失。
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using CvtePaintDemo;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Automation;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Ink;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Markup;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows.Media.Effects;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Media.Media3D;
|
||||||
|
using System.Windows.Media.TextFormatting;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
using System.Windows.Shell;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CvtePaintDemo {
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// App
|
||||||
|
/// </summary>
|
||||||
|
public partial class App : System.Windows.Application {
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// InitializeComponent
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
public void InitializeComponent() {
|
||||||
|
|
||||||
|
#line 5 "..\..\App.xaml"
|
||||||
|
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Application Entry Point.
|
||||||
|
/// </summary>
|
||||||
|
[System.STAThreadAttribute()]
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
public static void Main() {
|
||||||
|
CvtePaintDemo.App app = new CvtePaintDemo.App();
|
||||||
|
app.InitializeComponent();
|
||||||
|
app.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
20
CvtePaintDemo/obj/Release/CvtePaintDemo_MarkupCompile.cache
Normal file
20
CvtePaintDemo/obj/Release/CvtePaintDemo_MarkupCompile.cache
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
CvtePaintDemo
|
||||||
|
|
||||||
|
|
||||||
|
winexe
|
||||||
|
C#
|
||||||
|
.cs
|
||||||
|
D:\vs\ica\CvtePaintDemo\obj\Release\
|
||||||
|
CvtePaintDemo
|
||||||
|
none
|
||||||
|
false
|
||||||
|
TRACE
|
||||||
|
D:\vs\ica\CvtePaintDemo\App.xaml
|
||||||
|
11151548125
|
||||||
|
|
||||||
|
5-2017746502
|
||||||
|
13-1505183044
|
||||||
|
MainWindow.xaml;
|
||||||
|
|
||||||
|
True
|
||||||
|
|
@ -0,0 +1,20 @@
|
|||||||
|
CvtePaintDemo
|
||||||
|
|
||||||
|
|
||||||
|
winexe
|
||||||
|
C#
|
||||||
|
.cs
|
||||||
|
D:\vs\ica\CvtePaintDemo\obj\Release\
|
||||||
|
CvtePaintDemo
|
||||||
|
none
|
||||||
|
false
|
||||||
|
TRACE
|
||||||
|
D:\vs\ica\CvtePaintDemo\App.xaml
|
||||||
|
1219584333
|
||||||
|
|
||||||
|
6-1159578175
|
||||||
|
13-1310406943
|
||||||
|
MainWindow.xaml;
|
||||||
|
|
||||||
|
True
|
||||||
|
|
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
|
FD:\vs\ica\CvtePaintDemo\MainWindow.xaml;;
|
||||||
|
|
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
|
||||||
|
FD:\vs\ica\CvtePaintDemo\MainWindow.xaml;;
|
||||||
|
|
Binary file not shown.
75
CvtePaintDemo/obj/Release/MainWindow.g.cs
Normal file
75
CvtePaintDemo/obj/Release/MainWindow.g.cs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "F251DD2CC70977CB9EFF27F14FB23440C1BD22AA4CCAB4888B756B9B9189044B"
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// 此代码由工具生成。
|
||||||
|
// 运行时版本:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||||
|
// 重新生成代码,这些更改将会丢失。
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using CvtePaintDemo;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Automation;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Ink;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Markup;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows.Media.Effects;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Media.Media3D;
|
||||||
|
using System.Windows.Media.TextFormatting;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
using System.Windows.Shell;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CvtePaintDemo {
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// MainWindow
|
||||||
|
/// </summary>
|
||||||
|
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
|
||||||
|
|
||||||
|
private bool _contentLoaded;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// InitializeComponent
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
public void InitializeComponent() {
|
||||||
|
if (_contentLoaded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_contentLoaded = true;
|
||||||
|
System.Uri resourceLocater = new System.Uri("/CvtePaintDemo;component/mainwindow.xaml", System.UriKind.Relative);
|
||||||
|
|
||||||
|
#line 1 "..\..\MainWindow.xaml"
|
||||||
|
System.Windows.Application.LoadComponent(this, resourceLocater);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
|
||||||
|
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
|
||||||
|
this._contentLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
75
CvtePaintDemo/obj/Release/MainWindow.g.i.cs
Normal file
75
CvtePaintDemo/obj/Release/MainWindow.g.i.cs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "F251DD2CC70977CB9EFF27F14FB23440C1BD22AA4CCAB4888B756B9B9189044B"
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// 此代码由工具生成。
|
||||||
|
// 运行时版本:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||||
|
// 重新生成代码,这些更改将会丢失。
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using CvtePaintDemo;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Automation;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Controls.Primitives;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Ink;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Markup;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows.Media.Effects;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Media.Media3D;
|
||||||
|
using System.Windows.Media.TextFormatting;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
using System.Windows.Shell;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CvtePaintDemo {
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// MainWindow
|
||||||
|
/// </summary>
|
||||||
|
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
|
||||||
|
|
||||||
|
private bool _contentLoaded;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// InitializeComponent
|
||||||
|
/// </summary>
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
public void InitializeComponent() {
|
||||||
|
if (_contentLoaded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_contentLoaded = true;
|
||||||
|
System.Uri resourceLocater = new System.Uri("/CvtePaintDemo;component/mainwindow.xaml", System.UriKind.Relative);
|
||||||
|
|
||||||
|
#line 1 "..\..\MainWindow.xaml"
|
||||||
|
System.Windows.Application.LoadComponent(this, resourceLocater);
|
||||||
|
|
||||||
|
#line default
|
||||||
|
#line hidden
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
|
||||||
|
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
|
||||||
|
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
|
||||||
|
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
|
||||||
|
this._contentLoaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
125
Ink Canvas.sln
125
Ink Canvas.sln
@ -3,7 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.5.33530.505
|
VisualStudioVersion = 17.5.33530.505
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InkCanvasForClass", "Ink Canvas\InkCanvasForClass.csproj", "{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvasForClassX", "InkCanvasForClassX\InkCanvasForClassX.csproj", "{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}"
|
||||||
|
EndProject
|
||||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InkCanvasForClass", "InkCanvasForClass\InkCanvasForClass.csproj", "{2474F5B0-6FA7-4D70-8A00-167BBB03264D}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CvtePaintDemo", "CvtePaintDemo\CvtePaintDemo.csproj", "{26F0E9DD-A9DC-45D1-97B9-337C63863837}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Demos", "Demos", "{0B6F0669-8945-4AC7-923D-145BF23C38A0}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Assets", "Assets", "{D31A4267-C13F-41FE-8516-3B633E3B1990}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -17,28 +25,103 @@ Global
|
|||||||
Release|ARM64 = Release|ARM64
|
Release|ARM64 = Release|ARM64
|
||||||
Release|x64 = Release|x64
|
Release|x64 = Release|x64
|
||||||
Release|x86 = Release|x86
|
Release|x86 = Release|x86
|
||||||
|
x86 Debug|Any CPU = x86 Debug|Any CPU
|
||||||
|
x86 Debug|ARM = x86 Debug|ARM
|
||||||
|
x86 Debug|ARM64 = x86 Debug|ARM64
|
||||||
|
x86 Debug|x64 = x86 Debug|x64
|
||||||
|
x86 Debug|x86 = x86 Debug|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|ARM.Build.0 = Debug|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|ARM64.ActiveCfg = Debug|ARM64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|ARM64.Build.0 = Debug|ARM64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x64.ActiveCfg = Debug|x64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x64.Build.0 = Debug|x64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x86.ActiveCfg = Debug|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x86.Build.0 = Debug|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|Any CPU.Build.0 = Release|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|ARM.ActiveCfg = Release|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|ARM.Build.0 = Release|Any CPU
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|ARM64.ActiveCfg = Release|ARM64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|ARM64.Build.0 = Release|ARM64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|x64.ActiveCfg = Release|x64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|x64.Build.0 = Release|x64
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|x64.Build.0 = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|x86.ActiveCfg = Release|x86
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|x86.Build.0 = Release|x86
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{98DF6AA1-DD4D-4C70-A0A2-4B2974D97D51}.x86 Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|Any CPU.ActiveCfg = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|Any CPU.Build.0 = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|ARM.ActiveCfg = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|ARM.Build.0 = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|ARM64.ActiveCfg = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|ARM64.Build.0 = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|x64.ActiveCfg = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|x64.Build.0 = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|x86.ActiveCfg = x86 Debug|Any CPU
|
||||||
|
{2474F5B0-6FA7-4D70-8A00-167BBB03264D}.x86 Debug|x86.Build.0 = x86 Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|ARM.Build.0 = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|ARM64.ActiveCfg = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|ARM64.Build.0 = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|ARM.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|ARM64.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|ARM64.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{26F0E9DD-A9DC-45D1-97B9-337C63863837}.x86 Debug|x86.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,272 +0,0 @@
|
|||||||
using Ink_Canvas.Helpers;
|
|
||||||
using iNKORE.UI.WPF.Modern;
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Animation;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
|
|
||||||
namespace Ink_Canvas {
|
|
||||||
public partial class MainWindow : Window {
|
|
||||||
public bool isFloatingBarFolded = false;
|
|
||||||
private bool isFloatingBarChangingHideMode = false;
|
|
||||||
|
|
||||||
private void CloseWhiteboardImmediately() {
|
|
||||||
if (isDisplayingOrHidingBlackboard) return;
|
|
||||||
isDisplayingOrHidingBlackboard = true;
|
|
||||||
HideSubPanelsImmediately();
|
|
||||||
if (Settings.Gesture.AutoSwitchTwoFingerGesture) // 自动启用多指书写
|
|
||||||
ToggleSwitchEnableTwoFingerTranslate.IsOn = false;
|
|
||||||
WaterMarkTime.Visibility = Visibility.Collapsed;
|
|
||||||
WaterMarkDate.Visibility = Visibility.Collapsed;
|
|
||||||
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
|
|
||||||
ICCWaterMarkDark.Visibility = Visibility.Collapsed;
|
|
||||||
ICCWaterMarkWhite.Visibility = Visibility.Collapsed;
|
|
||||||
BtnSwitch_Click(BtnSwitch, null);
|
|
||||||
BtnExit.Foreground = Brushes.White;
|
|
||||||
ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark;
|
|
||||||
new Thread(new ThreadStart(() => {
|
|
||||||
Thread.Sleep(200);
|
|
||||||
Application.Current.Dispatcher.Invoke(() => { isDisplayingOrHidingBlackboard = false; });
|
|
||||||
})).Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void FoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
await FoldFloatingBar(sender);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task FoldFloatingBar(object sender)
|
|
||||||
{
|
|
||||||
var isShouldRejectAction = false;
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel)
|
|
||||||
((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent);
|
|
||||||
if (sender == Fold_Icon && lastBorderMouseDownObject != Fold_Icon) isShouldRejectAction = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isShouldRejectAction) return;
|
|
||||||
|
|
||||||
// FloatingBarIcons_MouseUp_New(sender);
|
|
||||||
if (sender == null)
|
|
||||||
foldFloatingBarByUser = false;
|
|
||||||
else
|
|
||||||
foldFloatingBarByUser = true;
|
|
||||||
unfoldFloatingBarByUser = false;
|
|
||||||
|
|
||||||
if (isFloatingBarChangingHideMode) return;
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
InkCanvasForInkReplay.Visibility = Visibility.Collapsed;
|
|
||||||
InkCanvasGridForInkReplay.Visibility = Visibility.Visible;
|
|
||||||
InkCanvasGridForInkReplay.IsHitTestVisible = true;
|
|
||||||
FloatingbarUIForInkReplay.Visibility = Visibility.Visible;
|
|
||||||
FloatingbarUIForInkReplay.IsHitTestVisible = true;
|
|
||||||
BlackboardUIGridForInkReplay.Visibility = Visibility.Visible;
|
|
||||||
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
|
||||||
AnimationsHelper.HideWithFadeOut(BorderInkReplayToolBox);
|
|
||||||
isStopInkReplay = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
isFloatingBarChangingHideMode = true;
|
|
||||||
isFloatingBarFolded = true;
|
|
||||||
if (currentMode != 0) CloseWhiteboardImmediately();
|
|
||||||
if (StackPanelCanvasControls.Visibility == Visibility.Visible)
|
|
||||||
if (foldFloatingBarByUser && inkCanvas.Strokes.Count > 2)
|
|
||||||
ShowNotification("正在清空墨迹并收纳至侧边栏,可进入批注模式后通过【撤销】功能来恢复原先墨迹。");
|
|
||||||
lastBorderMouseDownObject = sender;
|
|
||||||
CursorWithDelIcon_Click(sender, null);
|
|
||||||
});
|
|
||||||
|
|
||||||
await Task.Delay(10);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
|
||||||
RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
|
||||||
LeftSidePanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
|
||||||
RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
|
||||||
ViewboxFloatingBarMarginAnimation(-60);
|
|
||||||
HideSubPanels("cursor");
|
|
||||||
SidePannelMarginAnimation(-10);
|
|
||||||
});
|
|
||||||
isFloatingBarChangingHideMode = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void LeftUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
if (Settings.Appearance.IsShowQuickPanel == true) {
|
|
||||||
HideRightQuickPanel();
|
|
||||||
LeftUnFoldButtonQuickPanel.Visibility = Visibility.Visible;
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
var marginAnimation = new ThicknessAnimation {
|
|
||||||
Duration = TimeSpan.FromSeconds(0.1),
|
|
||||||
From = new Thickness(-50, 0, 0, -150),
|
|
||||||
To = new Thickness(-1, 0, 0, -150)
|
|
||||||
};
|
|
||||||
marginAnimation.EasingFunction = new CubicEase();
|
|
||||||
LeftUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
|
||||||
});
|
|
||||||
await Task.Delay(100);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
LeftUnFoldButtonQuickPanel.Margin = new Thickness(-1, 0, 0, -150);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
UnFoldFloatingBar_MouseUp(sender, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void RightUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
if (Settings.Appearance.IsShowQuickPanel == true) {
|
|
||||||
HideLeftQuickPanel();
|
|
||||||
RightUnFoldButtonQuickPanel.Visibility = Visibility.Visible;
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
var marginAnimation = new ThicknessAnimation {
|
|
||||||
Duration = TimeSpan.FromSeconds(0.1),
|
|
||||||
From = new Thickness(0, 0, -50, -150),
|
|
||||||
To = new Thickness(0, 0, -1, -150)
|
|
||||||
};
|
|
||||||
marginAnimation.EasingFunction = new CubicEase();
|
|
||||||
RightUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
|
||||||
});
|
|
||||||
await Task.Delay(100);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
RightUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -1, -150);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
UnFoldFloatingBar_MouseUp(sender, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void HideLeftQuickPanel() {
|
|
||||||
if (LeftUnFoldButtonQuickPanel.Visibility == Visibility.Visible) {
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
var marginAnimation = new ThicknessAnimation {
|
|
||||||
Duration = TimeSpan.FromSeconds(0.1),
|
|
||||||
From = new Thickness(-1, 0, 0, -150),
|
|
||||||
To = new Thickness(-50, 0, 0, -150)
|
|
||||||
};
|
|
||||||
marginAnimation.EasingFunction = new CubicEase();
|
|
||||||
LeftUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
|
||||||
});
|
|
||||||
await Task.Delay(100);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
LeftUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -50, -150);
|
|
||||||
LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void HideRightQuickPanel() {
|
|
||||||
if (RightUnFoldButtonQuickPanel.Visibility == Visibility.Visible) {
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
var marginAnimation = new ThicknessAnimation {
|
|
||||||
Duration = TimeSpan.FromSeconds(0.1),
|
|
||||||
From = new Thickness(0, 0, -1, -150),
|
|
||||||
To = new Thickness(0, 0, -50, -150)
|
|
||||||
};
|
|
||||||
marginAnimation.EasingFunction = new CubicEase();
|
|
||||||
RightUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
|
||||||
});
|
|
||||||
await Task.Delay(100);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
RightUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -50, -150);
|
|
||||||
RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void HideQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
HideLeftQuickPanel();
|
|
||||||
HideRightQuickPanel();
|
|
||||||
}
|
|
||||||
|
|
||||||
public async void UnFoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
await UnFoldFloatingBar(sender);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task UnFoldFloatingBar(object sender)
|
|
||||||
{
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
|
||||||
RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
|
||||||
});
|
|
||||||
if (sender == null || StackPanelPPTControls.Visibility == Visibility.Visible)
|
|
||||||
unfoldFloatingBarByUser = false;
|
|
||||||
else
|
|
||||||
unfoldFloatingBarByUser = true;
|
|
||||||
foldFloatingBarByUser = false;
|
|
||||||
|
|
||||||
if (isFloatingBarChangingHideMode) return;
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
isFloatingBarChangingHideMode = true;
|
|
||||||
isFloatingBarFolded = false;
|
|
||||||
});
|
|
||||||
|
|
||||||
await Task.Delay(0);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
if (StackPanelPPTControls.Visibility == Visibility.Visible)
|
|
||||||
{
|
|
||||||
var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
|
|
||||||
var dopsc = dops.ToCharArray();
|
|
||||||
if (dopsc[0] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(LeftBottomPanelForPPTNavigation);
|
|
||||||
if (dopsc[1] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(RightBottomPanelForPPTNavigation);
|
|
||||||
if (dopsc[2] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(LeftSidePanelForPPTNavigation);
|
|
||||||
if (dopsc[3] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(RightSidePanelForPPTNavigation);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
|
|
||||||
ViewboxFloatingBarMarginAnimation(60);
|
|
||||||
else
|
|
||||||
ViewboxFloatingBarMarginAnimation(100, true);
|
|
||||||
SidePannelMarginAnimation(-50, !unfoldFloatingBarByUser);
|
|
||||||
});
|
|
||||||
|
|
||||||
isFloatingBarChangingHideMode = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void SidePannelMarginAnimation(int MarginFromEdge, bool isNoAnimation = false) // Possible value: -50, -10
|
|
||||||
{
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
if (MarginFromEdge == -10) LeftSidePanel.Visibility = Visibility.Visible;
|
|
||||||
|
|
||||||
var LeftSidePanelmarginAnimation = new ThicknessAnimation {
|
|
||||||
Duration = isNoAnimation == true ? TimeSpan.FromSeconds(0) : TimeSpan.FromSeconds(0.175),
|
|
||||||
From = LeftSidePanel.Margin,
|
|
||||||
To = new Thickness(MarginFromEdge, 0, 0, -150)
|
|
||||||
};
|
|
||||||
LeftSidePanelmarginAnimation.EasingFunction = new CubicEase();
|
|
||||||
var RightSidePanelmarginAnimation = new ThicknessAnimation {
|
|
||||||
Duration = isNoAnimation == true ? TimeSpan.FromSeconds(0) : TimeSpan.FromSeconds(0.175),
|
|
||||||
From = RightSidePanel.Margin,
|
|
||||||
To = new Thickness(0, 0, MarginFromEdge, -150)
|
|
||||||
};
|
|
||||||
RightSidePanelmarginAnimation.EasingFunction = new CubicEase();
|
|
||||||
LeftSidePanel.BeginAnimation(MarginProperty, LeftSidePanelmarginAnimation);
|
|
||||||
RightSidePanel.BeginAnimation(MarginProperty, RightSidePanelmarginAnimation);
|
|
||||||
});
|
|
||||||
|
|
||||||
await Task.Delay(600);
|
|
||||||
|
|
||||||
await Dispatcher.InvokeAsync(() => {
|
|
||||||
LeftSidePanel.Margin = new Thickness(MarginFromEdge, 0, 0, -150);
|
|
||||||
RightSidePanel.Margin = new Thickness(0, 0, MarginFromEdge, -150);
|
|
||||||
|
|
||||||
if (MarginFromEdge == -50) LeftSidePanel.Visibility = Visibility.Collapsed;
|
|
||||||
});
|
|
||||||
isFloatingBarChangingHideMode = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,126 +0,0 @@
|
|||||||
using Ink_Canvas.Helpers;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Ink;
|
|
||||||
using System.Windows.Input;
|
|
||||||
|
|
||||||
namespace Ink_Canvas {
|
|
||||||
public partial class MainWindow : Window {
|
|
||||||
private void BoardChangeBackgroundColorBtn_MouseUp(object sender, RoutedEventArgs e) {
|
|
||||||
if (!isLoaded) return;
|
|
||||||
Settings.Canvas.UsingWhiteboard = !Settings.Canvas.UsingWhiteboard;
|
|
||||||
SaveSettingsToFile();
|
|
||||||
if (Settings.Canvas.UsingWhiteboard) {
|
|
||||||
if (inkColor == 5) lastBoardInkColor = 0;
|
|
||||||
ICCWaterMarkDark.Visibility = Visibility.Visible;
|
|
||||||
ICCWaterMarkWhite.Visibility = Visibility.Collapsed;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (inkColor == 0) lastBoardInkColor = 5;
|
|
||||||
ICCWaterMarkWhite.Visibility = Visibility.Visible;
|
|
||||||
ICCWaterMarkDark.Visibility = Visibility.Collapsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
CheckColorTheme(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) {
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint ||
|
|
||||||
inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke) {
|
|
||||||
if (BoardEraserSizePanel.Visibility == Visibility.Collapsed) {
|
|
||||||
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardEraserSizePanel);
|
|
||||||
} else {
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardEraserSizePanel);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
forceEraser = true;
|
|
||||||
forcePointEraser = true;
|
|
||||||
double k = 1;
|
|
||||||
if (Settings.Canvas.EraserShapeType == 0) {
|
|
||||||
switch (BoardComboBoxEraserSize.SelectedIndex)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
k = 0.5;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
k = 0.8;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
k = 1.25;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
k = 1.8;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
|
||||||
} else if (Settings.Canvas.EraserShapeType == 1) {
|
|
||||||
switch (BoardComboBoxEraserSize.SelectedIndex)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
k = 0.7;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
k = 0.9;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
k = 1.2;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
k = 1.6;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
|
||||||
}
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
|
||||||
drawingShapeMode = 0;
|
|
||||||
|
|
||||||
inkCanvas_EditingModeChanged(inkCanvas, null);
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
|
|
||||||
HideSubPanels("eraser");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BoardEraserIconByStrokes_Click(object sender, RoutedEventArgs e) {
|
|
||||||
//if (BoardEraserByStrokes.Background.ToString() == "#FF679CF4") {
|
|
||||||
// AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardDeleteIcon);
|
|
||||||
//}
|
|
||||||
//else {
|
|
||||||
forceEraser = true;
|
|
||||||
forcePointEraser = false;
|
|
||||||
|
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(5, 5);
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
|
|
||||||
drawingShapeMode = 0;
|
|
||||||
|
|
||||||
inkCanvas_EditingModeChanged(inkCanvas, null);
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
|
|
||||||
HideSubPanels("eraserByStrokes");
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BoardSymbolIconDelete_MouseUp(object sender, RoutedEventArgs e) {
|
|
||||||
PenIcon_Click(null, null);
|
|
||||||
SymbolIconDelete_MouseUp(null, null);
|
|
||||||
}
|
|
||||||
private void BoardSymbolIconDeleteInkAndHistories_MouseUp(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
PenIcon_Click(null, null);
|
|
||||||
SymbolIconDelete_MouseUp(null, null);
|
|
||||||
if (Settings.Canvas.ClearCanvasAndClearTimeMachine == false) timeMachine.ClearStrokeHistory();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BoardLaunchEasiCamera_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
ImageBlackboard_MouseUp(null, null);
|
|
||||||
SoftwareLauncher.LaunchEasiCamera("希沃视频展台");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void BoardLaunchDesmos_MouseUp(object sender, MouseButtonEventArgs e) {
|
|
||||||
HideSubPanelsImmediately();
|
|
||||||
ImageBlackboard_MouseUp(null, null);
|
|
||||||
Process.Start("https://www.desmos.com/calculator?lang=zh-CN");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
BIN
InkCanvasForClass/.vs/InkCanvasForClass/v17/.futdcache.v2
Normal file
BIN
InkCanvasForClass/.vs/InkCanvasForClass/v17/.futdcache.v2
Normal file
Binary file not shown.
BIN
InkCanvasForClass/.vs/InkCanvasForClass/v17/.suo
Normal file
BIN
InkCanvasForClass/.vs/InkCanvasForClass/v17/.suo
Normal file
Binary file not shown.
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.7 MiB |
7249
InkCanvasForClass/MainWindow.xaml
Normal file
7249
InkCanvasForClass/MainWindow.xaml
Normal file
File diff suppressed because it is too large
Load Diff
270
InkCanvasForClass/MainWindow_cs/MW_AutoFold.cs
Normal file
270
InkCanvasForClass/MainWindow_cs/MW_AutoFold.cs
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
using Ink_Canvas.Helpers;
|
||||||
|
using iNKORE.UI.WPF.Modern;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
|
||||||
|
namespace Ink_Canvas {
|
||||||
|
public partial class MainWindow : Window {
|
||||||
|
public bool isFloatingBarFolded = false;
|
||||||
|
private bool isFloatingBarChangingHideMode = false;
|
||||||
|
|
||||||
|
private void CloseWhiteboardImmediately() {
|
||||||
|
if (isDisplayingOrHidingBlackboard) return;
|
||||||
|
isDisplayingOrHidingBlackboard = true;
|
||||||
|
HideSubPanelsImmediately();
|
||||||
|
if (Settings.Gesture.AutoSwitchTwoFingerGesture) // 自动启用多指书写
|
||||||
|
ToggleSwitchEnableTwoFingerTranslate.IsOn = false;
|
||||||
|
WaterMarkTime.Visibility = Visibility.Collapsed;
|
||||||
|
WaterMarkDate.Visibility = Visibility.Collapsed;
|
||||||
|
BlackBoardWaterMark.Visibility = Visibility.Collapsed;
|
||||||
|
BtnSwitch_Click(BtnSwitch, null);
|
||||||
|
BtnExit.Foreground = Brushes.White;
|
||||||
|
ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark;
|
||||||
|
new Thread(new ThreadStart(() => {
|
||||||
|
Thread.Sleep(200);
|
||||||
|
Application.Current.Dispatcher.Invoke(() => { isDisplayingOrHidingBlackboard = false; });
|
||||||
|
})).Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void FoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
await FoldFloatingBar(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task FoldFloatingBar(object sender)
|
||||||
|
{
|
||||||
|
var isShouldRejectAction = false;
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel)
|
||||||
|
((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent);
|
||||||
|
if (sender == Fold_Icon && lastBorderMouseDownObject != Fold_Icon) isShouldRejectAction = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (isShouldRejectAction) return;
|
||||||
|
|
||||||
|
// FloatingBarIcons_MouseUp_New(sender);
|
||||||
|
if (sender == null)
|
||||||
|
foldFloatingBarByUser = false;
|
||||||
|
else
|
||||||
|
foldFloatingBarByUser = true;
|
||||||
|
unfoldFloatingBarByUser = false;
|
||||||
|
|
||||||
|
if (isFloatingBarChangingHideMode) return;
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
InkCanvasForInkReplay.Visibility = Visibility.Collapsed;
|
||||||
|
InkCanvasGridForInkReplay.Visibility = Visibility.Visible;
|
||||||
|
InkCanvasGridForInkReplay.IsHitTestVisible = true;
|
||||||
|
FloatingbarUIForInkReplay.Visibility = Visibility.Visible;
|
||||||
|
FloatingbarUIForInkReplay.IsHitTestVisible = true;
|
||||||
|
BlackboardUIGridForInkReplay.Visibility = Visibility.Visible;
|
||||||
|
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
||||||
|
AnimationsHelper.HideWithFadeOut(BorderInkReplayToolBox);
|
||||||
|
isStopInkReplay = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
isFloatingBarChangingHideMode = true;
|
||||||
|
isFloatingBarFolded = true;
|
||||||
|
if (currentMode != 0) CloseWhiteboardImmediately();
|
||||||
|
if (StackPanelCanvasControls.Visibility == Visibility.Visible)
|
||||||
|
if (foldFloatingBarByUser && inkCanvas.Strokes.Count > 2)
|
||||||
|
ShowNotification("正在清空墨迹并收纳至侧边栏,可进入批注模式后通过【撤销】功能来恢复原先墨迹。");
|
||||||
|
lastBorderMouseDownObject = sender;
|
||||||
|
CursorWithDelIcon_Click(sender, null);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.Delay(10);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
LeftBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
||||||
|
RightBottomPanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
||||||
|
LeftSidePanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
||||||
|
RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed;
|
||||||
|
ViewboxFloatingBarMarginAnimation(-60);
|
||||||
|
HideSubPanels("cursor");
|
||||||
|
SidePannelMarginAnimation(-10);
|
||||||
|
});
|
||||||
|
isFloatingBarChangingHideMode = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void LeftUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
if (Settings.Appearance.IsShowQuickPanel == true) {
|
||||||
|
HideRightQuickPanel();
|
||||||
|
LeftUnFoldButtonQuickPanel.Visibility = Visibility.Visible;
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
var marginAnimation = new ThicknessAnimation {
|
||||||
|
Duration = TimeSpan.FromSeconds(0.1),
|
||||||
|
From = new Thickness(-50, 0, 0, -150),
|
||||||
|
To = new Thickness(-1, 0, 0, -150)
|
||||||
|
};
|
||||||
|
marginAnimation.EasingFunction = new CubicEase();
|
||||||
|
LeftUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
||||||
|
});
|
||||||
|
await Task.Delay(100);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
LeftUnFoldButtonQuickPanel.Margin = new Thickness(-1, 0, 0, -150);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
UnFoldFloatingBar_MouseUp(sender, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void RightUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
if (Settings.Appearance.IsShowQuickPanel == true) {
|
||||||
|
HideLeftQuickPanel();
|
||||||
|
RightUnFoldButtonQuickPanel.Visibility = Visibility.Visible;
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
var marginAnimation = new ThicknessAnimation {
|
||||||
|
Duration = TimeSpan.FromSeconds(0.1),
|
||||||
|
From = new Thickness(0, 0, -50, -150),
|
||||||
|
To = new Thickness(0, 0, -1, -150)
|
||||||
|
};
|
||||||
|
marginAnimation.EasingFunction = new CubicEase();
|
||||||
|
RightUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
||||||
|
});
|
||||||
|
await Task.Delay(100);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
RightUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -1, -150);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
UnFoldFloatingBar_MouseUp(sender, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void HideLeftQuickPanel() {
|
||||||
|
if (LeftUnFoldButtonQuickPanel.Visibility == Visibility.Visible) {
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
var marginAnimation = new ThicknessAnimation {
|
||||||
|
Duration = TimeSpan.FromSeconds(0.1),
|
||||||
|
From = new Thickness(-1, 0, 0, -150),
|
||||||
|
To = new Thickness(-50, 0, 0, -150)
|
||||||
|
};
|
||||||
|
marginAnimation.EasingFunction = new CubicEase();
|
||||||
|
LeftUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
||||||
|
});
|
||||||
|
await Task.Delay(100);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
LeftUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -50, -150);
|
||||||
|
LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void HideRightQuickPanel() {
|
||||||
|
if (RightUnFoldButtonQuickPanel.Visibility == Visibility.Visible) {
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
var marginAnimation = new ThicknessAnimation {
|
||||||
|
Duration = TimeSpan.FromSeconds(0.1),
|
||||||
|
From = new Thickness(0, 0, -1, -150),
|
||||||
|
To = new Thickness(0, 0, -50, -150)
|
||||||
|
};
|
||||||
|
marginAnimation.EasingFunction = new CubicEase();
|
||||||
|
RightUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation);
|
||||||
|
});
|
||||||
|
await Task.Delay(100);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
RightUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -50, -150);
|
||||||
|
RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HideQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
HideLeftQuickPanel();
|
||||||
|
HideRightQuickPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void UnFoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
await UnFoldFloatingBar(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task UnFoldFloatingBar(object sender)
|
||||||
|
{
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
||||||
|
RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed;
|
||||||
|
});
|
||||||
|
if (sender == null || StackPanelPPTControls.Visibility == Visibility.Visible)
|
||||||
|
unfoldFloatingBarByUser = false;
|
||||||
|
else
|
||||||
|
unfoldFloatingBarByUser = true;
|
||||||
|
foldFloatingBarByUser = false;
|
||||||
|
|
||||||
|
if (isFloatingBarChangingHideMode) return;
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
isFloatingBarChangingHideMode = true;
|
||||||
|
isFloatingBarFolded = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.Delay(0);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
if (StackPanelPPTControls.Visibility == Visibility.Visible)
|
||||||
|
{
|
||||||
|
var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
|
||||||
|
var dopsc = dops.ToCharArray();
|
||||||
|
if (dopsc[0] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(LeftBottomPanelForPPTNavigation);
|
||||||
|
if (dopsc[1] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(RightBottomPanelForPPTNavigation);
|
||||||
|
if (dopsc[2] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(LeftSidePanelForPPTNavigation);
|
||||||
|
if (dopsc[3] == '2' && isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithFadeIn(RightSidePanelForPPTNavigation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
|
||||||
|
ViewboxFloatingBarMarginAnimation(60);
|
||||||
|
else
|
||||||
|
ViewboxFloatingBarMarginAnimation(100, true);
|
||||||
|
SidePannelMarginAnimation(-50, !unfoldFloatingBarByUser);
|
||||||
|
});
|
||||||
|
|
||||||
|
isFloatingBarChangingHideMode = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void SidePannelMarginAnimation(int MarginFromEdge, bool isNoAnimation = false) // Possible value: -50, -10
|
||||||
|
{
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
if (MarginFromEdge == -10) LeftSidePanel.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
|
var LeftSidePanelmarginAnimation = new ThicknessAnimation {
|
||||||
|
Duration = isNoAnimation == true ? TimeSpan.FromSeconds(0) : TimeSpan.FromSeconds(0.175),
|
||||||
|
From = LeftSidePanel.Margin,
|
||||||
|
To = new Thickness(MarginFromEdge, 0, 0, -150)
|
||||||
|
};
|
||||||
|
LeftSidePanelmarginAnimation.EasingFunction = new CubicEase();
|
||||||
|
var RightSidePanelmarginAnimation = new ThicknessAnimation {
|
||||||
|
Duration = isNoAnimation == true ? TimeSpan.FromSeconds(0) : TimeSpan.FromSeconds(0.175),
|
||||||
|
From = RightSidePanel.Margin,
|
||||||
|
To = new Thickness(0, 0, MarginFromEdge, -150)
|
||||||
|
};
|
||||||
|
RightSidePanelmarginAnimation.EasingFunction = new CubicEase();
|
||||||
|
LeftSidePanel.BeginAnimation(MarginProperty, LeftSidePanelmarginAnimation);
|
||||||
|
RightSidePanel.BeginAnimation(MarginProperty, RightSidePanelmarginAnimation);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Task.Delay(600);
|
||||||
|
|
||||||
|
await Dispatcher.InvokeAsync(() => {
|
||||||
|
LeftSidePanel.Margin = new Thickness(MarginFromEdge, 0, 0, -150);
|
||||||
|
RightSidePanel.Margin = new Thickness(0, 0, MarginFromEdge, -150);
|
||||||
|
|
||||||
|
if (MarginFromEdge == -50) LeftSidePanel.Visibility = Visibility.Collapsed;
|
||||||
|
});
|
||||||
|
isFloatingBarChangingHideMode = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
122
InkCanvasForClass/MainWindow_cs/MW_BoardIcons.cs
Normal file
122
InkCanvasForClass/MainWindow_cs/MW_BoardIcons.cs
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
using Ink_Canvas.Helpers;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Ink;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace Ink_Canvas {
|
||||||
|
public partial class MainWindow : Window {
|
||||||
|
private void BoardChangeBackgroundColorBtn_MouseUp(object sender, RoutedEventArgs e) {
|
||||||
|
if (!isLoaded) return;
|
||||||
|
Settings.Canvas.UsingWhiteboard = !Settings.Canvas.UsingWhiteboard;
|
||||||
|
SaveSettingsToFile();
|
||||||
|
if (Settings.Canvas.UsingWhiteboard) {
|
||||||
|
if (inkColor == 5) lastBoardInkColor = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (inkColor == 0) lastBoardInkColor = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckColorTheme(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) {
|
||||||
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint ||
|
||||||
|
inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke) {
|
||||||
|
if (BoardEraserSizePanel.Visibility == Visibility.Collapsed) {
|
||||||
|
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardEraserSizePanel);
|
||||||
|
} else {
|
||||||
|
AnimationsHelper.HideWithSlideAndFade(BoardEraserSizePanel);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
forceEraser = true;
|
||||||
|
forcePointEraser = true;
|
||||||
|
double k = 1;
|
||||||
|
if (Settings.Canvas.EraserShapeType == 0) {
|
||||||
|
switch (BoardComboBoxEraserSize.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
k = 0.5;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
k = 0.8;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
k = 1.25;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
k = 1.8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
||||||
|
} else if (Settings.Canvas.EraserShapeType == 1) {
|
||||||
|
switch (BoardComboBoxEraserSize.SelectedIndex)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
k = 0.7;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
k = 0.9;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
k = 1.2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
k = 1.6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
||||||
|
}
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
|
drawingShapeMode = 0;
|
||||||
|
|
||||||
|
inkCanvas_EditingModeChanged(inkCanvas, null);
|
||||||
|
CancelSingleFingerDragMode();
|
||||||
|
|
||||||
|
HideSubPanels("eraser");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BoardEraserIconByStrokes_Click(object sender, RoutedEventArgs e) {
|
||||||
|
//if (BoardEraserByStrokes.Background.ToString() == "#FF679CF4") {
|
||||||
|
// AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardDeleteIcon);
|
||||||
|
//}
|
||||||
|
//else {
|
||||||
|
forceEraser = true;
|
||||||
|
forcePointEraser = false;
|
||||||
|
|
||||||
|
inkCanvas.EraserShape = new EllipseStylusShape(5, 5);
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
|
||||||
|
drawingShapeMode = 0;
|
||||||
|
|
||||||
|
inkCanvas_EditingModeChanged(inkCanvas, null);
|
||||||
|
CancelSingleFingerDragMode();
|
||||||
|
|
||||||
|
HideSubPanels("eraserByStrokes");
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BoardSymbolIconDelete_MouseUp(object sender, RoutedEventArgs e) {
|
||||||
|
PenIcon_Click(null, null);
|
||||||
|
SymbolIconDelete_MouseUp(null, null);
|
||||||
|
}
|
||||||
|
private void BoardSymbolIconDeleteInkAndHistories_MouseUp(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
PenIcon_Click(null, null);
|
||||||
|
SymbolIconDelete_MouseUp(null, null);
|
||||||
|
if (Settings.Canvas.ClearCanvasAndClearTimeMachine == false) timeMachine.ClearStrokeHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BoardLaunchEasiCamera_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
ImageBlackboard_MouseUp(null, null);
|
||||||
|
SoftwareLauncher.LaunchEasiCamera("希沃视频展台");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BoardLaunchDesmos_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
|
HideSubPanelsImmediately();
|
||||||
|
ImageBlackboard_MouseUp(null, null);
|
||||||
|
Process.Start("https://www.desmos.com/calculator?lang=zh-CN");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1883
InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
Normal file
1883
InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
Normal file
File diff suppressed because it is too large
Load Diff
7
InkCanvasForClass/Properties/Settings.settings
Normal file
7
InkCanvasForClass/Properties/Settings.settings
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|
98
InkCanvasForClass/README.md
Normal file
98
InkCanvasForClass/README.md
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<img src="icc.png" width="128">
|
||||||
|
|
||||||
|
# InkCanvasForClass
|
||||||
|
|
||||||
|
Elegant by Default. Based on `ChangSakura/InkCanvas` .
|
||||||
|
|
||||||
|
**這將會是最後一次基於InkCanvas控件的倔強**
|
||||||
|
|
||||||
|
[![UPSTREAM](https://img.shields.io/badge/UpStream-ChangSakura%2FInk--Canvas-red.svg "LICENSE")](https://github.com/ChangSakura/Ink-Canvas)
|
||||||
|
![Gitea Last Commit](https://img.shields.io/gitea/last-commit/kriastans/InkCanvasForClass?gitea_url=https%3A%2F%2Fgitea.bliemhax.com%2F)
|
||||||
|
[![LICENSE](https://img.shields.io/badge/License-GPL--3.0-red.svg "LICENSE")](https://gitea.bliemhax.com/kriastans/InkCanvasForClass/src/branch/master/LICENSE)
|
||||||
|
[![交流群](https://img.shields.io/badge/-%E4%BA%A4%E6%B5%81%E7%BE%A4%20825759306-blue?style=flat&logo=TencentQQ)]()
|
||||||
|
[![Telegram](https://img.shields.io/badge/-Telegram%20@InkCanvasForClass-blue?style=flat&logo=Telegram)](https://t.me/InkCanvasForClass)
|
||||||
|
|
||||||
|
![Screenshot-1](./Images/icc1.png)
|
||||||
|
![Screenshot-2](./Images/icc2.png)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## 贊助支持
|
||||||
|
|
||||||
|
我已註冊愛發電,感謝各位對icc的支持![https://afdian.net/a/dubi906w](https://afdian.net/a/dubi906w)
|
||||||
|
|
||||||
|
## 新網站即將上線!
|
||||||
|
新網站即將上線,快來一起和InkCanvasForClass見證美好時刻吧![點我訪問](https://icc.bliemhax.com/)
|
||||||
|
|
||||||
|
## 嚴正聲明
|
||||||
|
本產品與peppy的osu!以及其周邊項目和產品無任何關聯,該Logo僅供娛樂用,若有侵權,請聯繫Dev協商解決。
|
||||||
|
|
||||||
|
## 公告
|
||||||
|
该项目旨在为ICA提供更加舒适和易于使用的UI和用户体验,对于任何墨迹书写方面的Bug如果本人无法修复将不会被修复。
|
||||||
|
|
||||||
|
## 前言
|
||||||
|
使用和分發本軟體前,請您應當且務必知曉相關開源協議,本軟體基於 https://github.com/ChangSakura/Ink-Canvas 修改而成,而ICA又基於 https://github.com/WXRIW/Ink-Canvas 修改而成,增添了包括但不限於隱藏到側邊欄等功能,更改了相關UI和軟體操作邏輯。對於墨跡書寫功能以及ICA獨有功能的相關 issue 提出,應優先查閱 https://github.com/WXRIW/Ink-Canvas/issues 。
|
||||||
|
|
||||||
|
[直接下載](https://gitea.bliemhax.com/kriastans/InkCanvasForClass/releases "Latest Releases")
|
||||||
|
——以壓縮檔案形式存儲,便攜版可直接啟動,默認配置適配絕大多數紅外觸摸框的設置。
|
||||||
|
|
||||||
|
> ⚠️注意:此項目仍在開發中,只會在發佈正式發行版時提供Release。您可以自行使用VS2022編譯打包後自行使用
|
||||||
|
|
||||||
|
## 特性
|
||||||
|
1. Support Active Pen (支持壓感)
|
||||||
|
2. 工具欄顯示了每個功能的文字描述
|
||||||
|
3. 添加了調色盤的顏色
|
||||||
|
4. 添加了熒光筆支持
|
||||||
|
|
||||||
|
## 提示
|
||||||
|
- 對新功能的有效意見和合理建議,開發者會適時回復並進行開發。本軟體並非商業性質軟體,請勿催促開發者,耐心才能讓功能更少 BUG、更加穩定。
|
||||||
|
- 此軟體僅用於私人使用,請勿商用。更新也不會很快,如果有能力請PR貢獻程式碼而不是在Issue裡面提問題。
|
||||||
|
- 歡迎您使用InkCanvas家族的其他成員,包括ICC和ICA的創始者IC以及和ICC差不多的ICA。您的大力宣傳能夠幫助我們的軟件被更多的用戶發現。
|
||||||
|
|
||||||
|
## FAQ
|
||||||
|
|
||||||
|
### 點擊放映後一翻頁就閃退?
|
||||||
|
考慮是由於`Microsoft Office`未啟用導致的,請自行啟用
|
||||||
|
|
||||||
|
### 放映後畫板程序不會切換到PPT模式?
|
||||||
|
如果你曾經安裝過`WPS`且在卸載後發現此問題則是由於暫時未確定的問題所導致,可以嘗試重新安裝WPS
|
||||||
|
> “您好,關於您回饋的情況我們已經回饋技術同學進一步分析哈,辛苦您可以留意後續WPS版本更新哈~” --回復自WPS客服
|
||||||
|
|
||||||
|
另外,處在保護(只讀)模式的PPT不會被識別
|
||||||
|
|
||||||
|
若因安裝了最新版本的 WPS 而導致無法在 WPS 軟體內進入 PPT 模式,可以嘗試卸載 WPS 後,並清除電腦垃圾、註冊表垃圾、刪除電腦上所有帶 "kingsoft" 名稱的文件夾,重新安裝 WPS 後,(以上步驟可能有多餘步驟),經測試在 WPS 內可以正常進入 PPT 模式。
|
||||||
|
|
||||||
|
ICC 可以支持 WPS,但目前無法同時支持 MSOffice 和 WPS。若要啟用 WPS 支持,請確保 WPS 是否在 “配置工具” 中開啟了 “WPS Office 相容第三方系統和軟體” 選項,該項目勾選並應用後,將無法檢測到 MS Office 的COM接口。
|
||||||
|
|
||||||
|
如果您安裝了“贛教通”、“暢言智慧課堂”等應用程式,可能會安裝“暢言備課精靈”,可能會導致遺失64為Office COM組建的註冊且目前似乎無法修復(可以切換到新用戶正常使用)。但 WPS Office 可以正常使用。
|
||||||
|
|
||||||
|
若要將 ICC 配合 WPS 使用,可打開“WPS 示範”後,前往“文件” - “選項” ,取消勾選“單螢幕幻燈片放映時,顯示放映工具欄”該項,獲得更好的體驗。若要將 ICC 配合 MS Office 使用,可以打開 Powerpoint,前往“選項” ,“高級”,取消勾選“顯示快捷工具欄”,獲得更好的體驗。
|
||||||
|
|
||||||
|
### **安裝後**程序無法正常啟動?
|
||||||
|
請檢查你的電腦上是否安裝了 `.Net Framework 4.7.2` 或更高版本。若沒有,請前往官網下載
|
||||||
|
|
||||||
|
> 遇到各種奇葩逗比問題請重啟應用程式,如果不行請反饋給Dev解決!
|
||||||
|
|
||||||
|
## 如何聯繫我
|
||||||
|
1. QQ群聊:825759306
|
||||||
|
2. Telegram頻道:@InkCanvasForClass
|
||||||
|
|
||||||
|
## 特別鳴謝
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ChangSakura"><img
|
||||||
|
src="https://avatars.githubusercontent.com/u/90511645?v=4" width="100px;"
|
||||||
|
alt="HelloWRC" /><br /><sub><b>ChangSakura</b></sub></a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/WXRIW"><img
|
||||||
|
src="https://avatars.githubusercontent.com/u/62491584?v=4" width="100px;"
|
||||||
|
alt="Doctor-yoi" /><br /><sub><b>WXRIW</b></sub></a></td>
|
||||||
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Alan-CRL"><img
|
||||||
|
src="https://avatars.githubusercontent.com/u/92425617?v=4" width="100px;"
|
||||||
|
alt="姜胤" /><br /><sub><b>Alan-CRL</b></sub></a></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user