mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-06-28 04:35:14 +08:00
behavior
This commit is contained in:
parent
e85766dcc5
commit
af2e243f07
33
CPF.Toolkit.Demo/CPF.Toolkit.Demo.csproj
Normal file
33
CPF.Toolkit.Demo/CPF.Toolkit.Demo.csproj
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>netcoreapp3.0</TargetFramework>
|
||||||
|
<ApplicationIcon />
|
||||||
|
<StartupObject />
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||||
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
|
<DefineConstants />
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="Stylesheet1.css" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Include="Stylesheet1.css" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\CPF.Linux\CPF.Linux.csproj" />
|
||||||
|
<ProjectReference Include="..\CPF.Mac\CPF.Mac.csproj" />
|
||||||
|
<ProjectReference Include="..\CPF.Skia\CPF.Skia.csproj" />
|
||||||
|
<ProjectReference Include="..\CPF.Toolkit\CPF.Toolkit.csproj" />
|
||||||
|
<ProjectReference Include="..\CPF.Windows\CPF.Windows.csproj" />
|
||||||
|
<ProjectReference Include="..\CPF\CPF.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
44
CPF.Toolkit.Demo/MainView.cs
Normal file
44
CPF.Toolkit.Demo/MainView.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using CPF;
|
||||||
|
using CPF.Animation;
|
||||||
|
using CPF.Charts;
|
||||||
|
using CPF.Controls;
|
||||||
|
using CPF.Drawing;
|
||||||
|
using CPF.Shapes;
|
||||||
|
using CPF.Styling;
|
||||||
|
using CPF.Svg;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit.Demo
|
||||||
|
{
|
||||||
|
public class MainView : Window
|
||||||
|
{
|
||||||
|
protected override void InitializeComponent()
|
||||||
|
{
|
||||||
|
//LoadStyleFile("res://CPF.Toolkit.Demo/Stylesheet1.css");
|
||||||
|
this.Behaviors.Add(new ViewBehavior());
|
||||||
|
|
||||||
|
this.Title = "标题";
|
||||||
|
this.Width = 500;
|
||||||
|
this.Height = 400;
|
||||||
|
this.Background = null;
|
||||||
|
var vm = new MainViewModel();
|
||||||
|
this.DataContext = this.CommandContext = vm;
|
||||||
|
this.Children.Add(new WindowFrame(this, new Panel
|
||||||
|
{
|
||||||
|
Width = "100%",
|
||||||
|
Height = "100%",
|
||||||
|
Children =
|
||||||
|
{
|
||||||
|
new Button
|
||||||
|
{
|
||||||
|
Content="按钮",
|
||||||
|
[nameof(Button.Click)] = new CommandDescribe((ss,ee) => vm.Test()),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
CPF.Toolkit.Demo/MainViewModel.cs
Normal file
27
CPF.Toolkit.Demo/MainViewModel.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using CPF.Controls;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit.Demo
|
||||||
|
{
|
||||||
|
internal class MainViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
protected override void OnLoaded()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Test()
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
//protected override void OnClosing(ClosingEventArgs e)
|
||||||
|
//{
|
||||||
|
// e.Cancel = true;
|
||||||
|
// base.OnClosing(e);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
21
CPF.Toolkit.Demo/Program.cs
Normal file
21
CPF.Toolkit.Demo/Program.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using CPF.Platform;
|
||||||
|
using CPF.Skia;
|
||||||
|
using CPF.Windows;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit.Demo
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
[STAThread]
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Application.Initialize(
|
||||||
|
(OperatingSystemType.Windows, new WindowsPlatform(), new SkiaDrawingFactory())
|
||||||
|
, (OperatingSystemType.OSX, new CPF.Mac.MacPlatform(), new SkiaDrawingFactory())//如果需要支持Mac才需要
|
||||||
|
, (OperatingSystemType.Linux, new CPF.Linux.LinuxPlatform(), new SkiaDrawingFactory())//如果需要支持Linux才需要
|
||||||
|
);
|
||||||
|
Application.Run(new MainView());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
502
CPF.Toolkit.Demo/Stylesheet1.css
Normal file
502
CPF.Toolkit.Demo/Stylesheet1.css
Normal file
@ -0,0 +1,502 @@
|
|||||||
|
/*@font-face {
|
||||||
|
font-family: '微软雅黑';
|
||||||
|
src: url('res://ConsoleApp1/msyh.ttc');
|
||||||
|
}*/ /*加载字体*/
|
||||||
|
|
||||||
|
/** {
|
||||||
|
FontFamily: 微软雅黑;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@media windows {
|
||||||
|
* {
|
||||||
|
FontFamily: '微软雅黑'; /*不同系统的字体不同,自己根据情况改或者使用内嵌字体*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media osx {
|
||||||
|
* {
|
||||||
|
FontFamily: '苹方-简';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media linux {
|
||||||
|
* {
|
||||||
|
FontFamily: '文泉驿正黑';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*设置窗体标题栏背景颜色圆角*/
|
||||||
|
/*#caption {
|
||||||
|
IsAntiAlias: true;
|
||||||
|
Background: #2c2c2c;
|
||||||
|
CornerRadius:5,5,0,0;
|
||||||
|
Height:30;
|
||||||
|
}
|
||||||
|
#frame {
|
||||||
|
CornerRadius: 5;
|
||||||
|
IsAntiAlias: true;
|
||||||
|
}*/
|
||||||
|
Button {
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
IsAntiAlias: True;
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
Background: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button[IsMouseOver=true] {
|
||||||
|
BorderFill: rgb(198,226,255);
|
||||||
|
Background: rgb(236,245,255);
|
||||||
|
Foreground: rgb(64,158,255);
|
||||||
|
}
|
||||||
|
|
||||||
|
Button[IsPressed=true] {
|
||||||
|
BorderFill: rgb(58,142,230);
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.primary {
|
||||||
|
BorderFill: rgb(64,158,255);
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
Background: rgb(64,158,255);
|
||||||
|
Foreground: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.primary[IsMouseOver=true] {
|
||||||
|
BorderFill: rgb(102,177,255);
|
||||||
|
Background: rgb(102,177,255);
|
||||||
|
Foreground: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.primary[IsPressed=true] {
|
||||||
|
BorderFill: rgb(58,142,230);
|
||||||
|
Background: rgb(58,142,230);
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.success {
|
||||||
|
BorderFill: rgb(103,194,58);
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
Background: rgb(103,194,58);
|
||||||
|
Foreground: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.success[IsMouseOver=true] {
|
||||||
|
BorderFill: rgb(133,206,97);
|
||||||
|
Background: rgb(133,206,97);
|
||||||
|
Foreground: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.success[IsPressed=true] {
|
||||||
|
BorderFill: rgb(93,175,52);
|
||||||
|
Background: rgb(93,175,52);
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.danger {
|
||||||
|
BorderFill: rgb(245,108,108);
|
||||||
|
Background: rgb(245,108,108);
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
Foreground: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.danger[IsMouseOver=true] {
|
||||||
|
BorderFill: rgb(247,137,137);
|
||||||
|
Background: rgb(247,137,137);
|
||||||
|
Foreground: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Button.danger[IsPressed=true] {
|
||||||
|
BorderFill: rgb(221,97,97);
|
||||||
|
Background: rgb(221,97,97);
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialogClose {
|
||||||
|
BorderFill: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextBox, .textBox, DatePicker {
|
||||||
|
Background: #fff;
|
||||||
|
IsAntiAlias: true;
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
BorderStroke: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.groupPanel TextBox, DatePicker TextBox, .textBox TextBox {
|
||||||
|
BorderStroke: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textBox[IsKeyboardFocusWithin=true] {
|
||||||
|
BorderFill: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.singleLine { /*单行文本框*/
|
||||||
|
AcceptsReturn: false;
|
||||||
|
HScrollBarVisibility: Hidden;
|
||||||
|
VScrollBarVisibility: Hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.singleLine #contentPresenter {
|
||||||
|
Padding: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.multiline { /*多行文本框*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.slotLeft {
|
||||||
|
CornerRadius: 0,4,4,0;
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
Background: #F5F7FA;
|
||||||
|
BorderThickness: 1,0,0,0;
|
||||||
|
BorderType: BorderThickness;
|
||||||
|
MarginTop: 0;
|
||||||
|
MarginBottom: 0;
|
||||||
|
MarginRight: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
RadioButton #radioButtonBorder {
|
||||||
|
StrokeFill: rgb(220,223,230);
|
||||||
|
}
|
||||||
|
|
||||||
|
RadioButton[IsChecked=true] #radioButtonBorder {
|
||||||
|
StrokeFill: #1E9FFF;
|
||||||
|
Fill: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
RadioButton #optionMark {
|
||||||
|
StrokeFill: #1E9FFF;
|
||||||
|
Fill: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBox #indeterminateMark {
|
||||||
|
Fill: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBox #checkBoxBorder {
|
||||||
|
Background: #fff;
|
||||||
|
BorderFill: rgb(220,223,230);
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBox[IsChecked=true] #checkBoxBorder {
|
||||||
|
Background: #1E9FFF;
|
||||||
|
BorderFill: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBox Polyline {
|
||||||
|
StrokeFill: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radioGroup {
|
||||||
|
BorderType: BorderThickness;
|
||||||
|
BorderFill: rgb(220,223,230);
|
||||||
|
BorderThickness: 1,1,0,1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radioGroup RadioButton {
|
||||||
|
BorderType: BorderThickness;
|
||||||
|
BorderFill: rgb(220,223,230);
|
||||||
|
BorderThickness: 0,0,1,0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radioGroup RadioButton #markPanel {
|
||||||
|
Visibility: Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radioGroup RadioButton TextBlock {
|
||||||
|
Margin: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radioGroup RadioButton[IsChecked=true] {
|
||||||
|
Background: rgb(64,158,255);
|
||||||
|
Foreground: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
Foreground: #f00;
|
||||||
|
Visibility: Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error[DesignMode=true] {
|
||||||
|
Visibility: Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.twoLine[AttachedExtenstions.IsError=true] .error {
|
||||||
|
Visibility: Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.twoLine[AttachedExtenstions.IsError=true] .textBox {
|
||||||
|
BorderFill: #f00;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollBar {
|
||||||
|
Background: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollBar Thumb {
|
||||||
|
IsAntiAlias: true;
|
||||||
|
CornerRadius: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollBar[Orientation=Horizontal] {
|
||||||
|
Height: 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollBar[Orientation=Vertical] {
|
||||||
|
Width: 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollBar #PART_LineUpButton, ScrollBar #PART_LineDownButton {
|
||||||
|
Visibility: Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox {
|
||||||
|
Background: #fff;
|
||||||
|
IsAntiAlias: true;
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
BorderStroke: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox[IsKeyboardFocusWithin=true] {
|
||||||
|
BorderFill: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
#DropDownPanel TextBlock {
|
||||||
|
MarginLeft: 5;
|
||||||
|
MarginTop: 2;
|
||||||
|
MarginBottom: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dropDownBorder {
|
||||||
|
ShadowBlur: 2;
|
||||||
|
ShadowColor: rgba(0, 0, 0, 0.4);
|
||||||
|
BorderStroke: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#DropDownPanel[IsMouseOver=false] ScrollBar {
|
||||||
|
Visibility: Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
#DropDownPanel ScrollBar[Orientation=Horizontal] {
|
||||||
|
Height: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
#DropDownPanel ScrollBar[Orientation=Vertical] {
|
||||||
|
Width: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider {
|
||||||
|
IsAntiAlias: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider Thumb {
|
||||||
|
IsAntiAlias: true;
|
||||||
|
Width: 16;
|
||||||
|
Height: 16;
|
||||||
|
CornerRadius: 7;
|
||||||
|
BorderFill: rgb(64,158,255);
|
||||||
|
BorderStroke: 2;
|
||||||
|
Background: #fff;
|
||||||
|
ZIndex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Slider Thumb[IsMouseOver=true] {
|
||||||
|
animation-name: sliderMouseOver;
|
||||||
|
animation-duration: 0.1s;
|
||||||
|
animation-iteration-count: 1;
|
||||||
|
animation-fill-mode: forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider #TrackBackground {
|
||||||
|
CornerRadius: 2;
|
||||||
|
Background: rgb(228,231,237);
|
||||||
|
BorderStroke: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider #decreaseRepeatButton {
|
||||||
|
Background: rgb(64,158,255);
|
||||||
|
CornerRadius: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider[Orientation=Horizontal] #decreaseRepeatButton {
|
||||||
|
Height: 4;
|
||||||
|
MarginLeft: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
Slider[Orientation=Vertical] #decreaseRepeatButton {
|
||||||
|
Width: 4;
|
||||||
|
MarginBottom: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProgressBar {
|
||||||
|
CornerRadius: 5;
|
||||||
|
IsAntiAlias: true;
|
||||||
|
BorderFill: null;
|
||||||
|
Background: rgb(235,238,245);
|
||||||
|
}
|
||||||
|
|
||||||
|
ProgressBar #Indicator, ProgressBar #Animation {
|
||||||
|
CornerRadius: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumericUpDown {
|
||||||
|
Background: #fff;
|
||||||
|
IsAntiAlias: true;
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
BorderStroke: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumericUpDown RepeatButton {
|
||||||
|
Width: 20;
|
||||||
|
Background: rgb(245,247,250);
|
||||||
|
}
|
||||||
|
|
||||||
|
NumericUpDown #decreaseBtn {
|
||||||
|
CornerRadius: 4,0,0,4;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumericUpDown #increaseBtn {
|
||||||
|
CornerRadius: 0,4,4,0;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumericUpDown #textBoxBorder {
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
}
|
||||||
|
|
||||||
|
NumericUpDown TextBox {
|
||||||
|
BorderStroke: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget {
|
||||||
|
IsAntiAlias: true;
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
CornerRadius: 4,4,4,4;
|
||||||
|
BorderStroke: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widgetHead {
|
||||||
|
Background: linear-gradient(0 0,0 100%,#F7F7F7 0,#F0F0F0 1);
|
||||||
|
BorderType: BorderThickness;
|
||||||
|
BorderThickness: 0,0,0,1;
|
||||||
|
BorderFill: #DCDFE6;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataGrid {
|
||||||
|
Foreground: #7a7a7a;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataGridCellTemplate, DataGridRow, DataGrid, .DataGridCell {
|
||||||
|
BorderFill: rgb(235,238,245);
|
||||||
|
}
|
||||||
|
|
||||||
|
DataGridRow {
|
||||||
|
Height: 36;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataGridRow[IsMouseOver=true] {
|
||||||
|
Background: rgb(245,247,250);
|
||||||
|
}
|
||||||
|
|
||||||
|
DataGridRow[IsSelected=true] {
|
||||||
|
Background: rgb(245,247,250);
|
||||||
|
}
|
||||||
|
|
||||||
|
DataGridColumnTemplate {
|
||||||
|
Height: 38;
|
||||||
|
FontSize: 15;
|
||||||
|
FontStyle: Bold;
|
||||||
|
Background: #fff;
|
||||||
|
BorderFill: rgb(235,238,245);
|
||||||
|
}
|
||||||
|
|
||||||
|
TabControl #headBorder {
|
||||||
|
Background: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabItem > Border {
|
||||||
|
BorderThickness: 0,0,0,2;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabItem[IsSelected=true] > Border {
|
||||||
|
BorderFill: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabItem[IsSelected=true] {
|
||||||
|
Foreground: #1E9FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabControl[TabStripPlacement=Left] TabItem, TabControl[TabStripPlacement=Right] TabItem {
|
||||||
|
Width: 100%;
|
||||||
|
BorderType: BorderThickness;
|
||||||
|
BorderThickness: 0,0,0,1;
|
||||||
|
BorderFill: #e8e8e8;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabControl[TabStripPlacement=Left] TabItem TextBlock {
|
||||||
|
MarginRight: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabControl[TabStripPlacement=Left] TabItem > Border {
|
||||||
|
Width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
TabControl[TabStripPlacement=Left] #headerPanel, TabControl[TabStripPlacement=Right] #headerPanel {
|
||||||
|
Width: 100;
|
||||||
|
Background: rgb(245,247,250);
|
||||||
|
}
|
||||||
|
|
||||||
|
.closeBtn[IsMouseOver=true] {
|
||||||
|
Fill: #171717;
|
||||||
|
}
|
||||||
|
|
||||||
|
.placeholder {
|
||||||
|
IsHitTestVisible: false;
|
||||||
|
Foreground: "192,196,204";
|
||||||
|
Visibility: Collapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textBox[AttachedExtenstions.IsEmpty=true] .placeholder {
|
||||||
|
Visibility: Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loginBox TextBox, .loginBox .placeholder {
|
||||||
|
FontSize: 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loginBox CheckBox {
|
||||||
|
Foreground: #757575;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchBox Button {
|
||||||
|
CornerRadius: 0,4,4,0,
|
||||||
|
}
|
||||||
|
|
||||||
|
#MenuPop #menuPanel > Border, #MenuPop ContextMenu > Border {
|
||||||
|
Background: #fff;
|
||||||
|
ShadowColor: rgba(0, 0, 0, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#MenuPop MenuItem[IsMouseOver=true] {
|
||||||
|
Background: #DCDFE6;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListBoxItem {
|
||||||
|
Width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialogClose, #dialogClose[IsMouseOver=true] {
|
||||||
|
Background: null;
|
||||||
|
BorderFill: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialogClose[IsPressed=true] {
|
||||||
|
Background: null;
|
||||||
|
BorderFill: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialogClose Line {
|
||||||
|
StrokeFill: 218,218,218;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dialogClose[IsMouseOver=true] Line {
|
||||||
|
StrokeFill: #fff;
|
||||||
|
}
|
15
CPF.Toolkit/CPF.Toolkit.csproj
Normal file
15
CPF.Toolkit/CPF.Toolkit.csproj
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netstandard2.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\CPF\CPF.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
3
CPF.Toolkit/FodyWeavers.xml
Normal file
3
CPF.Toolkit/FodyWeavers.xml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||||
|
<PropertyChanged />
|
||||||
|
</Weavers>
|
74
CPF.Toolkit/FodyWeavers.xsd
Normal file
74
CPF.Toolkit/FodyWeavers.xsd
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
|
||||||
|
<xs:element name="Weavers">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="PropertyChanged" minOccurs="0" maxOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute name="InjectOnPropertyNameChanged" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to control if the On_PropertyName_Changed feature is enabled.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="TriggerDependentProperties" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to control if the Dependent properties feature is enabled.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="EnableIsChangedProperty" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to control if the IsChanged property feature is enabled.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="EventInvokerNames" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to change the name of the method that fires the notify event. This is a string that accepts multiple values in a comma separated form.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="CheckForEquality" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to control if equality checks should be inserted. If false, equality checking will be disabled for the project.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="CheckForEqualityUsingBaseEquals" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to control if equality checks should use the Equals method resolved from the base class.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="UseStaticEqualsFromBase" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to control if equality checks should use the static Equals method resolved from the base class.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="SuppressWarnings" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to turn off build warnings from this weaver.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="SuppressOnPropertyNameChangedWarning" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Used to turn off build warnings about mismatched On_PropertyName_Changed methods.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
<xs:attribute name="VerifyAssembly" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="GenerateXsd" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
14
CPF.Toolkit/ICloseable.cs
Normal file
14
CPF.Toolkit/ICloseable.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using CPF.Controls;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit
|
||||||
|
{
|
||||||
|
public interface ICloseable
|
||||||
|
{
|
||||||
|
event EventHandler<ClosingEventArgs> Closable;
|
||||||
|
void OnClosable(ClosingEventArgs e);
|
||||||
|
}
|
||||||
|
}
|
11
CPF.Toolkit/ILoaded.cs
Normal file
11
CPF.Toolkit/ILoaded.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit
|
||||||
|
{
|
||||||
|
public interface ILoaded
|
||||||
|
{
|
||||||
|
void OnLoaded();
|
||||||
|
}
|
||||||
|
}
|
80
CPF.Toolkit/ViewBehavior.cs
Normal file
80
CPF.Toolkit/ViewBehavior.cs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
using CPF.Controls;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit
|
||||||
|
{
|
||||||
|
public class ViewBehavior : Behavior<Window>
|
||||||
|
{
|
||||||
|
protected override void OnBehaviorTo(Window window)
|
||||||
|
{
|
||||||
|
window.PropertyChanged += Window_PropertyChanged;
|
||||||
|
window.Loaded += Window_Loaded;
|
||||||
|
window.Closing += Window_Closing;
|
||||||
|
window.Closed += Window_Closed;
|
||||||
|
base.OnBehaviorTo(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDetachingFrom(Window window)
|
||||||
|
{
|
||||||
|
window.PropertyChanged -= Window_PropertyChanged;
|
||||||
|
window.Loaded -= Window_Loaded;
|
||||||
|
window.Closing -= Window_Closing;
|
||||||
|
window.Closed -= Window_Closed;
|
||||||
|
base.OnDetachingFrom(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_Closed(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var window = (Window)sender;
|
||||||
|
if (window.DataContext is IDisposable disposable)
|
||||||
|
{
|
||||||
|
disposable.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_Closing(object sender, ClosingEventArgs e)
|
||||||
|
{
|
||||||
|
var window = (Window)sender;
|
||||||
|
if (window.DataContext is ICloseable closeable)
|
||||||
|
{
|
||||||
|
closeable.OnClosable(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_Loaded(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var window = (Window)sender;
|
||||||
|
if (window.DataContext is ILoaded loaded)
|
||||||
|
{
|
||||||
|
loaded.OnLoaded();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Window_PropertyChanged(object sender, CPFPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
switch (e.PropertyName)
|
||||||
|
{
|
||||||
|
case nameof(DataContext):
|
||||||
|
{
|
||||||
|
if (e.NewValue is ICloseable closeable)
|
||||||
|
{
|
||||||
|
closeable.Closable -= Closeable_Closable;
|
||||||
|
closeable.Closable += Closeable_Closable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Closeable_Closable(object _, ClosingEventArgs ee)
|
||||||
|
{
|
||||||
|
if (!ee.Cancel)
|
||||||
|
{
|
||||||
|
var window = (Window)sender;
|
||||||
|
window.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
CPF.Toolkit/ViewModelBase.cs
Normal file
33
CPF.Toolkit/ViewModelBase.cs
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
using CPF.Controls;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF.Toolkit
|
||||||
|
{
|
||||||
|
public class ViewModelBase : INotifyPropertyChanged, ILoaded, IDisposable, ICloseable
|
||||||
|
{
|
||||||
|
WeakEventHandlerList events = new WeakEventHandlerList();
|
||||||
|
event EventHandler<ClosingEventArgs> ICloseable.Closable { add => AddHandler(value); remove => RemoveHandler(value); }
|
||||||
|
|
||||||
|
public virtual void Dispose() { }
|
||||||
|
|
||||||
|
void ICloseable.OnClosable(ClosingEventArgs e) => this.OnClosing(e);
|
||||||
|
|
||||||
|
void ILoaded.OnLoaded() => this.OnLoaded();
|
||||||
|
|
||||||
|
protected virtual void OnLoaded() { }
|
||||||
|
protected void Close() => this.RaiseEvent(new ClosingEventArgs(), nameof(ICloseable.Closable));
|
||||||
|
|
||||||
|
protected virtual void OnClosing(ClosingEventArgs e) { }
|
||||||
|
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
|
protected void AddHandler(Delegate handler, [CallerMemberName] string eventName = null) => events.AddHandler(handler, eventName);
|
||||||
|
protected void RemoveHandler(Delegate handler, [CallerMemberName] string eventName = null) => events.RemoveHandler(handler, eventName);
|
||||||
|
protected void RaiseEvent<TEventArgs>(in TEventArgs eventArgs, string eventName) => events[eventName]?.Invoke(this, eventArgs);
|
||||||
|
}
|
||||||
|
}
|
70
CPF/Behavior.cs
Normal file
70
CPF/Behavior.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CPF
|
||||||
|
{
|
||||||
|
public interface IBehaviorObject
|
||||||
|
{
|
||||||
|
void BehaviorTo(CpfObject cpfObject);
|
||||||
|
void DetachFrom(CpfObject cpfObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class Behavior : CpfObject, IBehaviorObject
|
||||||
|
{
|
||||||
|
protected Behavior() : this(typeof(CpfObject))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
internal Behavior(Type associatedType) => AssociatedType = associatedType ?? throw new ArgumentNullException(nameof(associatedType));
|
||||||
|
|
||||||
|
protected Type AssociatedType { get; }
|
||||||
|
|
||||||
|
void IBehaviorObject.BehaviorTo(CpfObject cpfObject)
|
||||||
|
{
|
||||||
|
if (cpfObject == null)
|
||||||
|
throw new ArgumentNullException(nameof(cpfObject));
|
||||||
|
if (!AssociatedType.IsInstanceOfType(cpfObject))
|
||||||
|
throw new InvalidOperationException("object not an instance of AssociatedType");
|
||||||
|
OnBehaviorTo(cpfObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IBehaviorObject.DetachFrom(CpfObject cpfObject) => OnDetachingFrom(cpfObject);
|
||||||
|
|
||||||
|
protected virtual void OnBehaviorTo(CpfObject cpfObject)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnDetachingFrom(CpfObject cpfObject)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract class Behavior<T> : Behavior where T : CpfObject
|
||||||
|
{
|
||||||
|
protected Behavior() : base(typeof(T))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnBehaviorTo(CpfObject cpfObject)
|
||||||
|
{
|
||||||
|
base.OnBehaviorTo(cpfObject);
|
||||||
|
OnBehaviorTo((T)cpfObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnBehaviorTo(T cpfObject)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDetachingFrom(CpfObject cpfObject)
|
||||||
|
{
|
||||||
|
OnDetachingFrom((T)cpfObject);
|
||||||
|
base.OnDetachingFrom(cpfObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnDetachingFrom(T cpfObject)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -28,6 +28,12 @@ namespace CPF.Controls
|
|||||||
|
|
||||||
IWindowImpl windowImpl;
|
IWindowImpl windowImpl;
|
||||||
|
|
||||||
|
bool isLoaded = false;
|
||||||
|
public event EventHandler Loaded
|
||||||
|
{
|
||||||
|
add => AddHandler(value);
|
||||||
|
remove => RemoveHandler(value);
|
||||||
|
}
|
||||||
public event EventHandler Closed
|
public event EventHandler Closed
|
||||||
{
|
{
|
||||||
add { AddHandler(value); }
|
add { AddHandler(value); }
|
||||||
@ -144,6 +150,11 @@ namespace CPF.Controls
|
|||||||
|
|
||||||
public void Show()
|
public void Show()
|
||||||
{
|
{
|
||||||
|
if (!this.isLoaded)
|
||||||
|
{
|
||||||
|
this.BeginInvoke(() => RaiseEvent(EventArgs.Empty, nameof(Loaded)));
|
||||||
|
this.isLoaded = true;
|
||||||
|
}
|
||||||
//windowImpl.Show();
|
//windowImpl.Show();
|
||||||
Visibility = Visibility.Visible;
|
Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
|
@ -178,6 +178,42 @@ namespace CPF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal IList<Behavior> behaviors;
|
||||||
|
[NotCpfProperty]
|
||||||
|
[Category("绑定")]
|
||||||
|
[Description("设置行为")]
|
||||||
|
public IList<Behavior> Behaviors
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (this.behaviors == null)
|
||||||
|
{
|
||||||
|
var b = new Collection<Behavior>();
|
||||||
|
b.CollectionChanged -= Behavior_CollectionChanged;
|
||||||
|
b.CollectionChanged += Behavior_CollectionChanged;
|
||||||
|
this.behaviors = b;
|
||||||
|
}
|
||||||
|
return this.behaviors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Behavior_CollectionChanged(object sender, CollectionChangedEventArgs<Behavior> e)
|
||||||
|
{
|
||||||
|
switch (e.Action)
|
||||||
|
{
|
||||||
|
case CollectionChangedAction.Add:
|
||||||
|
(e.NewItem as IBehaviorObject).BehaviorTo(this);
|
||||||
|
break;
|
||||||
|
case CollectionChangedAction.Remove:
|
||||||
|
(e.NewItem as IBehaviorObject).DetachFrom(this);
|
||||||
|
break;
|
||||||
|
case CollectionChangedAction.Replace:
|
||||||
|
break;
|
||||||
|
case CollectionChangedAction.Sort:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Type type;
|
Type type;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设置绑定
|
/// 设置绑定
|
||||||
@ -1387,7 +1423,6 @@ namespace CPF
|
|||||||
{
|
{
|
||||||
SetCommand(cpc, list1);
|
SetCommand(cpc, list1);
|
||||||
}
|
}
|
||||||
|
|
||||||
RaiseEvent(cpc, strPropertyChanged);
|
RaiseEvent(cpc, strPropertyChanged);
|
||||||
|
|
||||||
//PropertyChangedEventHandler handler = (PropertyChangedEventHandler)Events["INotifyPropertyChanged"];
|
//PropertyChangedEventHandler handler = (PropertyChangedEventHandler)Events["INotifyPropertyChanged"];
|
||||||
@ -1500,7 +1535,6 @@ namespace CPF
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 当要设置属性值的时候,返回值为true的时候将设置值
|
/// 当要设置属性值的时候,返回值为true的时候将设置值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 16.0.29324.140
|
VisualStudioVersion = 17.8.34316.72
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{ABE4ED47-CB9F-4183-9CE3-65E3E521BE2A}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleApp1", "ConsoleApp1\ConsoleApp1.csproj", "{ABE4ED47-CB9F-4183-9CE3-65E3E521BE2A}"
|
||||||
EndProject
|
EndProject
|
||||||
@ -63,12 +63,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CPF.Razor", "CPF.Razor\CPF.
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CpfRazorSample", "CpfRazorSample\CpfRazorSample.csproj", "{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CpfRazorSample", "CpfRazorSample\CpfRazorSample.csproj", "{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CPF.Toolkit", "CPF.Toolkit\CPF.Toolkit.csproj", "{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CPF.Toolkit.Demo", "CPF.Toolkit.Demo\CPF.Toolkit.Demo.csproj", "{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
|
||||||
Private\SharedVSIX\SharedVSIX.projitems*{db53e8d7-dfb6-48eb-a7b6-d1cf762acb9b}*SharedItemsImports = 4
|
|
||||||
Private\SharedVSIX\SharedVSIX.projitems*{df526631-d060-47f2-afd4-62c6cea2fe9a}*SharedItemsImports = 4
|
|
||||||
Private\SharedVSIX\SharedVSIX.projitems*{f34cffee-546f-490e-a76a-2792840b284d}*SharedItemsImports = 13
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
@ -240,6 +239,18 @@ Global
|
|||||||
{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}.Release|Any CPU.Build.0 = Release|Any CPU
|
{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}.类库d|Any CPU.ActiveCfg = Debug|Any CPU
|
{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}.类库d|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}.类库d|Any CPU.Build.0 = Debug|Any CPU
|
{25A4EE47-F5BD-4F1E-B143-3E3B50C5AC2A}.类库d|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}.类库d|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{0CB0CC36-940B-45C1-83D1-0A9FF68CB157}.类库d|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}.类库d|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{BC4120CE-5AE4-4577-98D4-BFF7C4B067B4}.类库d|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -260,4 +271,9 @@ Global
|
|||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {16FB883C-167C-4E1A-B311-6D74452A3CD6}
|
SolutionGuid = {16FB883C-167C-4E1A-B311-6D74452A3CD6}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||||
|
Private\SharedVSIX\SharedVSIX.projitems*{db53e8d7-dfb6-48eb-a7b6-d1cf762acb9b}*SharedItemsImports = 4
|
||||||
|
Private\SharedVSIX\SharedVSIX.projitems*{df526631-d060-47f2-afd4-62c6cea2fe9a}*SharedItemsImports = 4
|
||||||
|
Private\SharedVSIX\SharedVSIX.projitems*{f34cffee-546f-490e-a76a-2792840b284d}*SharedItemsImports = 13
|
||||||
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
Loading…
Reference in New Issue
Block a user