CPF/ConsoleApp1/Window2.cs

4624 lines
250 KiB
C#
Raw Normal View History

2023-11-21 23:05:03 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CPF;
using CPF.Drawing;
using CPF.Controls;
using CPF.Animation;
using System.Data;
using System.Diagnostics;
using CPF.Shapes;
using CPF.Svg;
using System.Threading;
using CPF.Input;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Linq.Expressions;
using System.Reflection.Emit;
using CPF.Styling;
using CPF.Documents;
using System.Threading.Tasks;
//#if !DesignMode&&!Net4
////using System.Reactive.Linq;
////using System.Reactive;
//using UglyToad.PdfPig;
//#endif
namespace ConsoleApp1
{
public class Window2 : Window
{
Model model = new Model();
ThreeDEffect2 effect = new ThreeDEffect2 { Depth = 3000, Y = 90, };
DataGridColumn column = new DataGridCheckBoxColumn
{
Header = "d1fsd",
Binding = new DataGridBinding("p2")
{
BindingMode = BindingMode.TwoWay
},
Width = "100",
HeaderTemplate = typeof(ColumnTemplate),
};
protected override void InitializeComponent()
{
//var img = Image.FromFile(@"C:\Users\xhm\Desktop\231.gif");
//TopMost = true;
Nodes = new Collection<NodeData>
{
new NodeData
{
Text="test1",
Nodes=
{
new NodeData
{
Text="asda"
},
new NodeData
{
Text="asda"
},
new NodeData
{
Text="1asda"
},
new NodeData
{
Text="2asda"
},
}
},
new NodeData
{
Text="测试",
Nodes=
{
new NodeData
{
Text="3asda"
},
new NodeData
{
Text="4asda",
Nodes=
{
new NodeData
{
Text="6asda"
},
new NodeData
{
Text="7asda"
},
}
},
new NodeData
{
Text="6asda"
},
new NodeData
{
Text="7asda"
},
new NodeData
{
Text="4asda",
Nodes=
{
new NodeData
{
Text="6asda"
},
new NodeData
{
Text="7asda"
},
new NodeData
{
Text="6asda"
},
new NodeData
{
Text="7asda"
},
}
},
new NodeData
{
Text="3asda"
},
new NodeData
{
Text="4asda",
Nodes=
{
new NodeData
{
Text="6asda"
},
new NodeData
{
Text="7asda"
},
new NodeData
{
Text="6asda"
},
new NodeData
{
Text="7asda"
},
}
},
}
}
};
List1 = new Collection<TestClass>();
for (int i = 0;
i < 10;
i++)
{
List1.Add(new TestClass
{
test = i.ToString()
});
}
List2 = new Collection<TestClass>();
//Columns = new Collection<DataGridColumn>();
Title = "CPF演示案例";
Width = 860;
Height = 600;
Background = null;
CanResize = true;
MinHeight = 100;
MinWidth = 200;
DragThickness = 10;
Children.Add(new WindowFrame(this, new Panel
{
Background = null,
Width = "100%",
Height = "100%",
Children =
{
new Button
{
MarginTop = 0,
Content = "点击生成pdf",
2023-11-27 15:57:46 +08:00
[nameof(Button.Content)]= new Obx<MainModel>(a => a.Test1.test.test.test.test.Name),
2023-11-21 23:05:03 +08:00
Commands =
{
{
nameof(Button.Click),
(a,b)=>
{
var TabControl = FindPresenterByName<TabControl>("mainTab");
#if !Net4
CPF.Skia.SkiaPdf.CreatePdf(TabControl.SelectedItem.ContentElement,"test.pdf");
#endif
}
}
},
},//内容元素放这里
new TabControl
{
MarginTop = 20,
Name="mainTab",
PresenterFor = this,
TabStripPlacement= Dock.Left,
Width="100%",
Height="100%",//SelectedIndex=2,
Items=
{
new TabItemTemplate
{
Header="基础控件",
Content=new Panel
{
PresenterFor = this,
Name = nameof(page1),
Width="100%",
Height="100%",
Background="#fff",
Children=
{
new Button
{
PresenterFor = this,
Name = nameof(btn),
Classes="Test",
FontStyle= FontStyles.Bold| FontStyles.Italic,
Width=150,
Height=25,
Content="另外一个演示窗体😍",
MarginTop=20,
MarginLeft=20,
2023-11-27 15:57:46 +08:00
[nameof(Button.Click)]=new CommandDescribe((s,e)=>
2023-11-21 23:05:03 +08:00
{
var w = new Window1();
w.DataContext = model;
w.CommandContext = w.DataContext;
//w.TopMost=true;
w.Show();
}),//Commands=
//{
// {
// nameof(Button.Click),
// (s,e)=>
// {
// var w = new Window1();
// w.DataContext = model;
// w.CommandContext = w.DataContext;
// //w.TopMost=true;
// w.Show();
// }
// }
//}
},
new CheckBox
{
IsChecked = null,
Content="复选框1",
MarginTop="64",
MarginLeft="20"
},
new CheckBox
{
Content="复选框2",
MarginTop="90",
MarginLeft="20",
IsThreeState=true
},
new RadioButton
{
IsChecked = true,
Content="单选框1",
MarginTop="120",
MarginLeft="20",
GroupName="gn1"
},
new RadioButton
{
Content="单选框2",
MarginTop=150,
MarginLeft=20,
GroupName="gn1"
},
new Border
{
Name="shadowEffect",
MarginTop=180,
MarginLeft=15,
Width=110,
Height=33,
Background="#fff",
BorderType= BorderType.BorderThickness,
ShadowBlur=5,
ShadowColor="0,0,0,0",
Child=new TextBox
{
Classes=
{
"Single"
},
PresenterFor=this,
Name="textbox1",
MarginBottom=0,
MarginLeft=0,
MarginRight=0,
MarginTop=0,
Text="dfsfs"
}
},//绑定当前页面里的元素被绑定的元素需要设置PresenterFor=this
new TextBox
{
Padding = "0,5,0,0",
Name="password",
PresenterFor=this,
Classes=
{
"Single"
},
MarginTop=220,
MarginLeft=20,
Width=100,
Height = 24,
Background="#fff",
Bindings=
{
{
nameof(TextBox.Text),
nameof(TextBox.Text),
this.FindPresenter<TextBox>(a=>a.Name=="textbox1")
}
},//Text="test",
PasswordChar='*',
CornerRadius="8",
IsAntiAlias=true
},
new TextBox
{
Commands =
{
{
nameof(TextBox.MouseDown),
nameof(testHandled),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
{
nameof(TextBox.IsFocused),
nameof(textFocus),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
{
nameof(TextBox.KeyDown),
nameof(KeyDownTest),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Bindings =
{
{
nameof(TextBox.Document),
nameof(Document),
this,
BindingMode.OneWayToSource
},
},
Padding = "5,5,5,5",
PresenterFor = this,
Name = nameof(textBox),
MarginTop=250,
MarginLeft=20,
Width="40%",
Height=258,
Background="#FFFFC7",
Text="多行文本框😀😁😂😃123haha",
IsAllowPasteImage=true,
AcceptsTab=true,
Styles =
{
new DocumentStyle
{
Foreground="#f00"
}
}
},
new ScrollBar
{
MarginTop = 89,
Maximum = 10f,
Width = 136,
Value = 0.5f,
Name = "scrollbar",
MarginRight=529,
MarginBottom=434,
MarginLeft=171,
Orientation= Orientation.Horizontal,
Background="url(res://ConsoleApp1/Resources/()1.gif) Tile None 0,0,0,0"
},
new ScrollBar
{
Cursor = Cursors.Cross,
MarginLeft=373.6f,
MarginTop=24.2f,
Width=27f,
Height=154.5f,
Orientation= Orientation.Vertical,
Background="#fff"
},
new Picture
{
Source="res://ConsoleApp1/Resources/主页.png",
MarginTop=215,
MarginLeft=200
},
new Picture
{
Height = 41,
Width = 122,
Source="https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo_top-e3b63a0b1b.png",
MarginTop=168,
MarginLeft=167
},
new ComboBox
{
//IsVirtualizing=true,
PresenterFor = this,
Name = nameof(testCombobox),//IsEditable=true,
//SelectionMode= SelectionMode.Multiple,
//SelectedIndex=2,
MarginTop=138,
MarginLeft=262,
Width=100,
Height=25,
ItemTemplate=new ListBoxItem
{
Width="100%",
FontSize=14,
ContentTemplate=new ContentTemplate
{
Width="auto",
MarginLeft=5,
}
},
Bindings =
{
{
nameof(ComboBox.Items),
nameof(MainModel.TestItems),
null,
BindingMode.TwoWay
},
{
nameof(ComboBox.SelectedValue),
nameof(MainModel.SelectValue),
null,
BindingMode.TwoWay
},
},
DisplayMemberPath="Item1",
SelectedValuePath="Item2",//IsVirtualizing=true
IsEditable=true,
},
new ScrollViewer
{
2023-11-29 21:06:01 +08:00
Background = "url(res://ConsoleApp1/icon.png) Tile None 0,0,0,0",
MarginLeft = 421,//HorizontalScrollBarVisibility= ScrollBarVisibility.Disabled,
//VerticalScrollBarVisibility= ScrollBarVisibility.Visible,
2023-11-21 23:05:03 +08:00
Commands =
{
{
nameof(ScrollViewer.MouseDown),
nameof(scrollViewerMouseDown),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
{
nameof(ScrollViewer.MouseUp),
nameof(scrollViewerMouseUp),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Content=
//new Picture
//{
// PresenterFor = this,
// Name = nameof(pic),
// Source="http://219.239.12.91:5001/bookimage//bookimage3/cate1826979600058c0bd3/file253320e4000582XXXX/253320e4000582XXXX.jpg"
//}
#if !Net4&&!NETCOREAPP3_0
new GLView
{
Height = 336,
Width = 421,
2023-11-29 21:06:01 +08:00
IsAntiAlias=true,
},
2023-11-29 21:06:01 +08:00
#else
2023-11-21 23:05:03 +08:00
new WrapPanel
{
Width="100%",
Children =
{
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
new Button
{
Content="123"
},
}
},
2023-11-29 21:06:01 +08:00
#endif
2023-11-21 23:05:03 +08:00
Height=300,
MarginTop=19,
MarginRight=29
},
new Ellipse
{
StrokeStyle = "10,Solid",
Width=145,
Height=83,
IsAntiAlias=true,
Triggers=
{
new CPF.Styling.Trigger(nameof(IsMouseOver),Relation.Me)
{
Setters=
{
{
nameof(Ellipse.Fill),
"#f00"
}
}
},
},
},
new Expander
{
MarginTop=350,
Header="test",
Content= new Button
{
Content="test内容"
}
}
//.Bind(this,t=>t.FocusFrameFill,s=>s.Background,BindingMode.OneWay)
,// new Button{ Content="test",Commands={ {nameof(Button.Click),(s,e)=>MessageBox.Show("Test")
//} } },
//new Calendar{ },
new DatePicker
{
Width=100,
Height=20,
MarginTop=100
},//new DatePicker{ Width=100, Height=30},
new NumericUpDown
{
MarginLeft = 386,
MarginTop = 401,
Width = 83,
Minimum = 0.001,
Increment = 0.001,
Maximum=100,
Value=0.001,
Bindings =
{
2023-11-21 23:05:03 +08:00
}
},
new Button
{
MarginLeft = 175f,
MarginTop = 138.2f,
Content = "附加样式",
Bindings =
{
{
nameof(Button.Foreground),
nameof(MainModel.TestBool),
null,
BindingMode.OneWay,
(bool a)=>a?(ViewFill)"#fff":"#000"
}
},
Commands=
{
{
nameof(Button.Click),
(s,e)=>
{
this.LoadStyleFile("res://ConsoleApp1/testApend.css", true);
}
}
}
},
new Button
{
Commands =
{
{
"Click",
nameof(scrollEnd),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Height = 30,
Width = 98,
MarginLeft = 495,
MarginTop = 362,
Content = "滚动到最底下",
},
new Button
{
Height = 34,
Width = 110,
MarginLeft = 666,
MarginTop = 349,
Content = "Button",
Commands =
{
{
nameof(Button.Click),
(s,e)=>
{
pic.Source= this.Screen.Screenshot();
}
}
}
},
new EditComboBox
{
Width = 91,//Bindings =
//{
// {
// nameof(ComboBox.Items),
// nameof(MainModel.TestItems1)
// },
//},
[nameof(ComboBox.Items)]=nameof(MainModel.TestItems1),//Commands =
//{
// {
// nameof(ComboBox.DoubleClick),
// nameof(comboBoxtest),
// this,
// CommandParameter.EventSender,
// CommandParameter.EventArgs
// },
// {
// nameof(ComboBox.IsDropDownOpen),
// nameof(TestComboBox),
// this,
// CommandParameter.EventSender,
// CommandParameter.EventArgs
// },
//},
PresenterFor = this,
Name = nameof(combox),
MarginLeft = 200,
MarginTop = 25,
},
new Slider
{
TickPlacement = TickPlacement.TopLeft,
MarginLeft = 547,
MarginTop = 427,
Height = 25,
Width = 151,
},
new Panel
{
Children =
{
new SVG
{
Fill = "#959595",
Height = 29,
IsAntiAlias = true,
Width = 33,
Stretch = Stretch.Uniform,
Source="<svg t=\"1631519369186\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3913\" width=\"16\" height=\"16\"><path d=\"M812.698413 212.746384c79.825044 79.825044 121.362963 180.238448 124.613757 300.517813-3.250794 119.918166-44.788713 219.97037-124.613757 300.156614-79.825044 80.186243-179.877249 121.724162-299.795414 124.252557-120.640564-2.528395-220.692769-44.066314-300.517813-124.252557-79.825044-80.186243-121.362963-180.238448-124.613757-300.156614 3.250794-120.640564 44.788713-220.692769 124.613757-300.517813 79.825044-79.825044 179.877249-121.362963 300.517813-124.613757C633.182363 91.383422 732.873369 132.92134 812.698413 212.746384zM786.692063 791.387654c72.962257-72.962257 110.888183-164.345679 114.138977-274.150265-3.250794-109.804586-41.17672-201.188007-114.138977-274.150265-72.601058-72.962257-163.98448-110.888183-273.789065-113.416578C402.737213 131.837743 311.353792 169.763668 238.391534 243.087125c-72.962257 72.962257-110.888183 164.345679-114.138977 274.150265 3.250794 109.804586 41.17672 201.188007 114.138977 274.150265 72.601058 72.962257 164.345679 110.888183 274.872663 113.416578C622.707584 902.275838 714.091005 864.349912 786.692063 791.387654z\" p-id=\"3914\"></path></svg>"
}
},
MarginLeft = 383,
MarginTop = 450,
Height = 58,
Width = 121,
2023-11-29 10:59:22 +08:00
},
new Button
2023-11-21 23:05:03 +08:00
{
Commands =
{
{
nameof(Button.Click),
nameof(ShowLayer),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Height = 21,
Width = 105,
MarginTop = 62,
MarginLeft = 195,
Content = "弹出Window2",
},
new ProgressBar
{
Height = 16,
Width = 142,
MarginTop = 473,
MarginLeft = 532,//[nameof(ProgressBar.Value)]="Value",
//[nameof(ProgressBar.Value)]=("Value",BindingMode.TwoWay),
//[nameof(ProgressBar.Value)]=(null,"Value",BindingMode.TwoWay,a=>a.ToString()),
//[nameof(ProgressBar.Value)]=new BindingDescribe(null,"Value",BindingMode.TwoWay,a=>a.ToString())
},
new TextBlock
{
TextTrimming= TextTrimming.CharacterEllipsis,
Height = 59,
Width = 41,
MarginTop = 397,
MarginLeft = 321,
Text = "Te\nxtBlock",
},
new CPF.Controls.Switch
{
PresenterFor = this,
Name = nameof(_sw),
Height = 30,
Width = 64,
MarginTop = 189,
MarginLeft = 300,
}
.Assign(out var sw),
new Button
{
Commands =
{
{
nameof(Button.Click),
nameof(PDF),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginLeft = 98,
MarginTop = 69,
Content = "解析PDF"+sw.IsChecked,
},
new Viewbox
{
MarginLeft = 426,
MarginTop = 344,
Child = new Path("M159.375 196.875A9.375 9.375 0 0 1 140.625 196.875V133.8375L113.83125 89.2125A9.375 9.375 0 1 1 129.91875 79.55625L158.04375 126.43125A9.375 9.375 0 0 1 159.375 131.25V196.875zM121.875 300A9.375 9.375 0 0 1 121.875 281.25H131.25V261.1875A131.26875 131.26875 0 0 1 69.88125 27.3L58.59375 16.0125A9.375 9.375 0 0 1 71.85 2.7375L85.8375 16.725A130.6875 130.6875 0 0 1 150 0A130.6875 130.6875 0 0 1 214.1625 16.725L228.15 2.7375A9.375 9.375 0 0 1 241.4062500000001 16.0125L230.1375 27.3A131.26875 131.26875 0 0 1 168.75 261.1875V281.25H178.125A9.375 9.375 0 0 1 178.125 300H121.875zM141.3375 243.4125A114.24375 114.24375 0 0 0 158.6625 243.4125A112.5 112.5 0 1 0 141.3375 243.4125zM0 234.375C0 220.25625 6.24375 207.58125 16.125 198.99375A150.65625 150.65625 0 0 0 82.25625 265.125A46.875 46.875 0 0 1 0 234.375zM253.125 281.25C239.00625 281.25 226.33125 275.00625 217.74375 265.125A150.65625 150.65625 0 0 0 283.875 198.99375A46.875 46.875 0 0 1 253.125 281.25z")
{
IsAntiAlias = true,
StrokeStyle = "10,Solid",
},
Height = 30,
Width = 35,
},
}
}
},
new TabItemTemplate
{
Header="动画",//IsSelected=true,
Content=new Panel
{
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="弹窗动画",
Width=100,
Height=25,
MarginLeft=20,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> ShowDialogForm()
}
}
}
.AfterStyle(a=>
{
a.Background="#0f0";
}),
new Button
{
Content="缓动动画1",
Width=100,
Height=25,
MarginLeft=160,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s,new QuadraticEase())
}
}
},
new Button
{
Content="缓动动画2",
Width=100,
Height=25,
MarginLeft=260,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s,new CubicEase())
}
}
},
new Button
{
Content="缓动动画3",
Width=100,
Height=25,
MarginLeft=360,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s,new ElasticEase())
}
}
},
new Button
{
Content="缓动动画4",
Width=100,
Height=25,
MarginLeft=460,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s,new ExponentialEase())
}
}
},
new Button
{
Content="缓动动画5",
Width=100,
Height=25,
MarginLeft=560,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s,new QuinticEase())
}
}
},
new Button
{
Content="缓动动画6",
Width=100,
Height=25,
MarginLeft=660,
MarginTop=20,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s,new SineEase())
}
}
},
new Button
{
Content=new Panel
{
Children=
{
new SVG("res://ConsoleApp1/test.svg")
{
MarginLeft = 0,
MarginTop = 0,
Height = 106,
Width=178,
Stretch= Stretch.Fill,
},
new Picture
{
Stretch = Stretch.Fill,
Source = "res://ConsoleApp1/Resources/te.gif",
Height = 60,
Width =80,
}
},
},
Width=104,
Height=55,
MarginLeft=60,
MarginTop=130,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s)
}
}
},
new Path("M 150,10 T 250,100 80,280")
{
//ClipToBounds = true,
Height = 98,
IsAntiAlias = true,
StrokeStyle = new Stroke(1,DashStyles.Custom,0,new float[]
{
10,
5,
2,
5
},CapStyles.Round,LineJoins.Round),//StrokeFill="url(res://ConsoleApp1/Resources/icon.png)",
},
new Slider
{
MarginLeft = 602,
MarginTop = 258,
Maximum = 100f,
Width = 179.1f,
Bindings=
{
{
nameof(Slider.Value),
nameof(TestValue),
this
}
}
},
new Picture
{
Stretch = Stretch.Fill,
Source = "res://ConsoleApp1/Resources/loading.gif",
Height = 103,
Width = 114,
MarginLeft = 24,
MarginTop = 299,
},
new Picture
{
Stretch = Stretch.Fill,
Source = "res://ConsoleApp1/Resources/te.gif",
Height = 110,
Width = 230,
MarginLeft = 557,
MarginTop = 310,
},
new Line
{
IsHitTestOnPath=true,
Commands =
{
{
nameof(Line.MouseDown),
nameof(lineMouseDown),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
},
new test
{
Width=793,
Height=81,
MarginLeft=16,
MarginBottom=42,
Valeft = 5,
Commands=
{
{
nameof(SVG.MouseUp),
(a,b)=> (a as test).Animation(a as test)
}
}
},
new StackPanel
{
Children =
{
new NativeElement
{
Height = 142,
Width = 159,
BackColor=Color.Blue,
}
},
MarginTop = 56,
Height = 172,
Width = 167,
},
new Path
{
IsAntiAlias = true,
Width = 205,
Height = 130,
MarginLeft = 461,
MarginTop = 78,
Fill = "#FFFF00",
Stretch = Stretch.Uniform,
Data="M224.94 813.36c-6.69 0-13.47-1.41-19.96-4.32-19.04-8.52-30.23-27.44-28.53-48.19 0.19-2.37 0.41-4.08 0.51-4.83 1.36-12.07 7.44-54.68 29.59-112.4 14.46-37.62 32.71-72.58 54.26-103.93 27.38-39.65 59.92-73.91 96.77-101.88 9.34-7.73 76.59-61.43 170.59-86.98v-59.34c0-22.02 12.57-41.09 32.82-49.77s42.72-4.63 58.67 10.56l199.82 190.34c15.82 15.07 24.53 35.4 24.53 57.24 0 21.85-8.71 42.17-24.53 57.24L619.65 747.48c-15.95 15.19-38.43 19.24-58.67 10.56-20.24-8.67-32.82-27.74-32.82-49.77v-47.71c-20.67 4.04-40.97 8.95-60.6 14.66-40.38 11.77-77.42 26.68-110.06 44.3-36.29 19.66-64.79 41.98-92.29 72.3-0.9 1.15-2.82 3.56-5.59 6.47-9.38 9.87-21.85 15.07-34.68 15.07z m39.93-21.15c-0.02 0.02-0.04 0.04-0.06 0.07 0.01-0.03 0.03-0.05 0.06-0.07z m-48.27-30.89s-0.15 1.09-0.29 2.81c-0.42 5.17 2.96 7.49 5.01 8.41 1.99 0.89 5.85 1.84 9.3-1.79 1.6-1.69 2.68-3.05 3.26-3.79 0.36-0.46 0.74-0.94 1.26-1.51 30.39-33.6 63.23-59.37 103.33-81.1 35.14-18.97 74.81-34.96 117.91-47.52 28.51-8.29 58.31-14.98 88.58-19.89 5.79-0.94 11.7 0.71 16.16 4.51 4.47 3.8 7.04 9.37 7.04 15.23v71.6c0 8.42 5.99 11.89 8.57 13 2.58 1.1 9.23 3.05 15.33-2.76l199.82-190.34c7.81-7.44 12.12-17.49 12.12-28.28 0-10.79-4.3-20.83-12.12-28.28L592.06 281.27c-6.09-5.81-12.75-3.86-15.33-2.76s-8.57 4.58-8.57 13v74.93c0 9.32-6.44 17.4-15.52 19.49-94.41 21.72-162.4 76.72-169.84 82.92-0.24 0.2-0.48 0.39-0.73 0.58-33.6 25.44-63.32 56.72-88.34 92.96-19.75 28.73-36.54 60.89-49.86 95.57-20.59 53.67-26.03 92.21-27.2 102.74-0.02 0.21-0.04 0.41-0.07 0.62z m0 0z"
},
2023-11-21 23:05:03 +08:00
}
}
},
new TabItemTemplate
{
Header="布局",
Content=new Panel
{
Name = "布局",
PresenterFor = this,
Width="100%",
Height="100%",
Children=
{
new StackPanel
{
MarginLeft=10,
MarginTop=10,
Orientation= Orientation.Vertical,
Children=
{
new Button
{
Content="StackPanel的Vertical"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
}
},
new StackPanel
{
BorderStroke = "5,Solid",
BorderFill = "#B4B4B4",
MarginLeft=80,
MarginTop=50,
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="StackPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
}
},
new WrapPanel
{
MarginRight=10,
MarginTop=10,
Width="50%",
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="WrapPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
new Button
{
Content="宽度不够"
},
new Button
{
Content="可以自动换行"
},
}
},
new Grid
{
RenderTransform=new RotateTransform(10),
Name="testGrid",
Background="#999",
Width="80%",
Height="60%",
MarginTop=120,
MarginLeft=20,
ColumnDefinitions=
{
new ColumnDefinition
{
Width="40*"
},
new ColumnDefinition
{
Width = "30*"
},
new ColumnDefinition
{
Width="200",
[nameof(ColumnDefinition.Width)]=nameof(MainModel.ColumnWidth)
},
},
RowDefinitions=
{
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
}
},
Children=
{
new WrapPanel
{
Name="test",
Background="#a2f",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="水平浮动布局231"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
{
new WrapPanel
{
Orientation= Orientation.Vertical,
Background="#27a",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="垂直浮动布局"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
1,
1
},
{
new TextBlock
{
Background="#ac2",
Width="100%",
Height="100%",
Text="Grid布局。。。"
},
2,
1
},
{
new Panel
{
Background="#b1a",
MarginLeft=0,
MarginRight=0,
Children=
{
new Button
{
Content="跨列",
Width="50%"
}
}
},
0,
2,
2
},
{
new TextBlock
{
Background="#186",
Height="100%",
Text="跨行"
},
2,
1,
1,
2
},
new TextBox
{
MarginLeft=10,
Size=SizeField.Fill,
Text="元素变换,可以旋转,倾斜,缩放等操作",
Attacheds=
{
{
Grid.ColumnIndex,
1
}
}
},
new Button
{
Content=new SVG("res://ConsoleApp1/test.svg")
{
MarginLeft = 0,
MarginTop = 0,
Height = 85,
Width=170,
Stretch= Stretch.Uniform,
},
Width=104,
Height=55,
MarginLeft=60,
MarginTop=120,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s)
}
}
}
},
},
new DockPanel
{
LastChildFill = false,
Width=200,
Height=200,
MarginRight=0,
MarginTop=50,
Background="#f00",
Children =
{
new Button
{
Content="Right",
Height="100%",
Attacheds =
{
{
DockPanel.Dock,
Dock.Right
}
}
},
}
},
new Slider
{
Maximum = 300,
Value = 200,
MarginLeft = 252,
MarginTop = 76,
Height = 23,
Width = 219,//[nameof(Slider.Value)]= new Obx<MainModel>(a => a.Type.Name),
2023-11-27 15:57:46 +08:00
[nameof(Slider.Value)]= new BindingDescribe(null, nameof(MainModel.ColumnWidth),BindingMode.OneWayToSource,null,a=>new GridLength((float)(double)a))
2023-11-21 23:05:03 +08:00
},
}
}
},
new TabItemTemplate
{
Header="ListBox",
Content=new Panel
{
Width="100%",
Height="100%",
Children=
{
new ListBox
{
SelectionMode = SelectionMode.Multiple,
AlternationCount = 2,
Width=300,
Height=500,
ItemTemplate=typeof(ListBoxItemTemplate),
Bindings=
{
{
nameof(ListBox.Items),
nameof(Items),
this
}
},
},
new Button
{
Commands =
{
{
nameof(Button.Click),
nameof(TestClear),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Height = 25,
Width = 80,
MarginTop = 47,
MarginLeft = 536,
Content = "Button",
},
new DataGrid
{
PresenterFor = this,
Name = nameof(testGrid),
Height = 113,
Width = 132,
MarginTop = 72,
MarginLeft = 47,
},
new Button
{
Commands =
{
{
nameof(Button.Click),
nameof(addColumnClick),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginTop = 218,
MarginLeft = 47,
Content = "添加列",
},
}
}
},
new TabItemTemplate
{
Header="DataGrid",
Content=new Panel
{
Width="100%",
Height="100%",
Children=
{
new DataGrid
{
ContextMenu=new ContextMenu
{
Items=
{
new MenuItem
{
Header="123"
}
}
},
PresenterFor = this,
Name = nameof(testDataGrid),//IsVirtualizing=false,
Width = 544,
Height = 344,//VirtualizationMode= VirtualizationMode.Standard,
Background = "#fff",//CustomScrollData=customScrollData,
ItemTemplate=typeof(DataGridRowTemplate),
AlternationCount=2,
SelectionUnit= DataGridSelectionUnit.Cell,//SelectionMode= DataGridSelectionMode.Single,
Columns =
{
new DataGridComboBoxColumn
{
Header="dfsd",
Binding=new DataGridBinding("p1",BindingMode.TwoWay),
Width="100",
Items=
{
"0",
"1",
"2",
"3"
},//Visibility= Visibility.Collapsed
},
column,
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="3dfsd",
Binding=new DataGridBinding("p3")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
},
new DataGridTextColumn
{
Header="输入类型验证",
Binding=new DataGridBinding("p4")
{
BindingMode= BindingMode.TwoWay
},
Width="100",
}
//new DataGridTemplateColumn
//{
// Header="自定义模板",
// Binding=new DataGridBinding("p5"),
// Width="*",
// CellTemplate=typeof(CellTemplate)
//},
},
Bindings =
{
{
nameof(DataGrid.Items),
nameof(Data),
this
},//{
// nameof(DataGrid.Items),
// nameof(ItemCollection),
// this,
// BindingMode.OneWayToSource
//},//{ nameof(DataGrid.Columns), nameof(Columns),this }
}
},
new Button
{
Commands =
{
{
nameof(Button.Click),
nameof(AddTest),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginLeft = 245,
MarginTop = 21,
Content = "添加",
},
new Button
{
Commands =
{
{
nameof(Button.Click),
nameof(ClearData),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginLeft = 355,
MarginTop = 21,
Content = "清除",
},
new Button
{
Commands =
{
{
nameof(Button.Click),
nameof(addColumn),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginLeft = 442,
MarginTop = 17,
Content = "addColumn",
},
}
}
},
new TabItemTemplate
{
Header="TreeView",
Content=new Panel
{
Width="100%",
Height="100%",
Children=
{
new TreeView
{
PresenterFor = this,
Name = nameof(testTreeVIew),
Bindings =
{
{
"SelectedValue",
nameof(SelectNode),
this,
BindingMode.OneWayToSource
},
{
"Items",
"Nodes",
this
},
},
Width=300,
Height=500,
DisplayMemberPath=nameof(NodeData.Text),
ItemsMemberPath=nameof(NodeData.Nodes),//HeaderTemplate=typeof(TreeViewItemContentTemplate),
//ItemTemplate=typeof(TreeViewItemTemplate),
//Items=new TreeViewItem[]{ new TreeViewItem { Header="24" } }
},
new Button
{
Commands =
{
{
"Click",
nameof(addItem),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginLeft = 599,
MarginTop = 24,
Content = "添加子节点",
},
new Button
{
MarginLeft = 597,
MarginTop = 66,
Commands =
{
{
"Click",
nameof(RemoveItem),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Content = "删除节点",
},
}
}
},
new TabItemTemplate
{
//[nameof(Name)]=nameof(Button.Content),
//[nameof(Name)]=(nameof(Button.Content),BindingMode.TwoWay),
//[nameof(MouseDown)]=new Action<CpfObject,object>((a,b)=>{ }),
Header="test",
Content= new Panel
{
Commands =
{
{
nameof(Button.TouchMove),
nameof(TouchDownTest),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Size=SizeField.Fill,
Children =
{
new SVG("res://ConsoleApp1/test.svg")
{
Commands =
{
{
nameof(SVG.MouseUp),
nameof(svgMouseUP),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
MarginLeft = 442,
MarginTop = 50,
Height = 199,
Width=245,
Stretch= Stretch.Uniform,
}
//new Border
//{
// BorderFill="#f00",
// BorderStroke="1",
// Child=new Border
// {
// Size=SizeField.Fill,
// BorderFill="#0f0",
// BorderStroke="1",
// Child=new StackPanel
// {
// Children =
// {
// new TextBlock{Text="432sd"},
// new TextBlock{Text="gdfsa"},
// new TextBlock{Text="gsdsd"},
// new TextBlock{Text="gfdfs"},
// }
// }
// }
//}
,
new Viewbox
{
Stretch = Stretch.Uniform,
Child = new Button
{
Commands =
{
{
nameof(Button.MouseUp),
nameof(ShowPopup),
this,
CommandParameter.EventSender,
CommandParameter.EventArgs
},
},
Height = 79,
Width = 88,
Content = "弹窗测试",
},
MarginLeft = 16,
MarginTop = 84,
Height = 116,
Width = 190,
},
new WrapPanel
{
Height = 66,
Width = 78,
}
.LoopCreate(10,i=>new Button
{
Content=i
}),
new Border
{
Child = new Button
{
MarginTop = 17,
MarginLeft = 21,
Content = "Button",
},
Height = 69,
Width = 131,
MarginTop = 42,
MarginLeft = 275,
},
new Button
{
Height = 30,
Width = 95,
MarginTop = 152,
MarginLeft = 295,
Content = "Button",
},
new CheckBox
{
MarginTop = 26.2f,
MarginLeft = 101.8f,
Content = "CheckBox",
},
new Panel
{
MarginLeft = 30,
MarginTop = 281,
IsGroup = true,
Children =
{
new Button
{
Width = 26,
Height = "100%",
MarginRight = 0,
Content = new Polyline
{
Points =
{
{
0,
0
},
{
5,
5
},
{
10,
0
}
},
IsAntiAlias=true
},
ContextMenu=new ContextMenu
{
Items =
{
new MenuItem
{
StaysOpenOnClick=true,
Header="123"
},
new Separator
{
2023-11-21 23:05:03 +08:00
},
new MenuItem
{
Header="1233423",
Items =
{
new MenuItem
{
Header="45242"
}
}
},
}
},
Commands =
{
{
nameof(Button.MouseUp),
(s,e)=>
{
var E=e as MouseButtonEventArgs;
if (E.MouseButton== MouseButton.Left)
{
var cm = (s as UIElement).ContextMenu;
if (cm != null)
{
cm.DataContext = DataContext;
cm.CommandContext = CommandContext;
cm.PlacementTarget = s as UIElement;
cm.Placement= PlacementMode.Padding;
cm.PopupMarginLeft=0;
cm.PopupMarginTop="100%";
cm.IsOpen = true;
}
}
else
{
E.Handled=true;
}
}
}
}
},
new TextBlock
{
MarginLeft = 11,
Text = "带下拉菜单",
Commands =
{
{
nameof(MouseDown),
(s,e)=>
{
(s as UIElement).Parent.GetChildren()[0].ContextMenu.Items.Add(new MenuItem
{
Header="test"
});
}
}
}
},
},
Height = 31,
Width = 129,
}
}
}
},
new TabItemTemplate
{
Content = new Page1
{
Height = "100%",
Width = "100%",
},
Header = "TabItem",
},
new TestTabItem
{
Content = new Panel
{
Children =
{
new Grid
{
Children =
{
new TextBox
{
MarginLeft=10,
Size=SizeField.Fill,
Text="元素变换可以旋转倾斜缩放等操作1111111111111111111111111111111111111111111111111111111111111112",
Attacheds=
{
{
Grid.ColumnIndex,
1
}
}
}
},
Height = 228,
Width = "100%",
ColumnDefinitions =
{
new ColumnDefinition
{
Width=250
},
new ColumnDefinition
{
Width="*"
},
}
},
},
Height = "100%",
Width = "100%",
},
Header = new StackPanel
{
Orientation = Orientation.Horizontal,
Classes = "imgAndText",
IsGroup = true,
Children =
{
new SVG
{
Fill = "#959595",
Height = 28,
IsAntiAlias = true,
Width = 28,
Stretch = Stretch.Uniform,
Source="<svg t=\"1631519369186\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"3913\" width=\"16\" height=\"16\"><path d=\"M812.698413 212.746384c79.825044 79.825044 121.362963 180.238448 124.613757 300.517813-3.250794 119.918166-44.788713 219.97037-124.613757 300.156614-79.825044 80.186243-179.877249 121.724162-299.795414 124.252557-120.640564-2.528395-220.692769-44.066314-300.517813-124.252557-79.825044-80.186243-121.362963-180.238448-124.613757-300.156614 3.250794-120.640564 44.788713-220.692769 124.613757-300.517813 79.825044-79.825044 179.877249-121.362963 300.517813-124.613757C633.182363 91.383422 732.873369 132.92134 812.698413 212.746384zM786.692063 791.387654c72.962257-72.962257 110.888183-164.345679 114.138977-274.150265-3.250794-109.804586-41.17672-201.188007-114.138977-274.150265-72.601058-72.962257-163.98448-110.888183-273.789065-113.416578C402.737213 131.837743 311.353792 169.763668 238.391534 243.087125c-72.962257 72.962257-110.888183 164.345679-114.138977 274.150265 3.250794 109.804586 41.17672 201.188007 114.138977 274.150265 72.601058 72.962257 164.345679 110.888183 274.872663 113.416578C622.707584 902.275838 714.091005 864.349912 786.692063 791.387654z\" p-id=\"3914\"></path></svg>"
},
new TextBlock
{
MarginLeft = 5f,
Classes = "text",
Text = "文字",
},
},
},
Triggers =
{
new Trigger(nameof(TestTabItem.IsMouseOver), Relation.Me)
{
Setters =
{
{
nameof(TestTabItem.Foreground),
"#419EFF"
},
{
nameof(TestTabItem.Background),
"#ecf5ff"
}
}
},
new Trigger(nameof(TestTabItem.IsSelected), Relation.Me)
{
Setters =
{
{
nameof(TestTabItem.Foreground),
"white"
},
{
nameof(TestTabItem.Background),
"#3a8ee6"
}
}
}
}
},
new TabItemTemplate
{
Header = "生成pdf",
Content = new Panel
{
Size = new SizeField("100%","100%"),
},
},
new TabItemTemplate
{
Header = "TextBox",
Content = new Panel
{
Size = new SizeField("100%","100%"),
Children =
{
// new CodeTextBox
// {
// MarginTop = 0,
// MarginLeft = 0,
// Width="70%",
// Height=519,
// FontSize = 20,
// WordWarp = false,
// FontFamily = "新宋体",
// HScrollBarVisibility = ScrollBarVisibility.Visible,
// VScrollBarVisibility = ScrollBarVisibility.Visible,
// SelectionFill = "153,201,239",
// Text = @"new TabItemTemplate{
// Header = ""生成pdf"",
// Content = new Panel{
// Size = new SizeField(""100%"",""100%""),
// },
//",
// Background="255,255,255",
// Styles=
// {
// new DocumentStyle
// {
// Foreground = "#008000"
// },
// new DocumentStyle
// {
// Foreground = "128,0,0"
// },
// new DocumentStyle
// {
// Foreground = "DarkBlue"
// },
// new DocumentStyle
// {
// Foreground = "143,8,196"
// },
// new DocumentStyle
// {
// Foreground = "31,86,173"
// },
// new DocumentStyle
// {
// Foreground = "#8000FF"
// },
// new DocumentStyle
// {
// Foreground = "#c3c3fd"
// },
// },
// KeywordsStyles=
// {
// new KeywordsStyle
// {
// Keywords = @"(\/\/.*|\/\*[\s\S]*?\*\/)",// 匹配注释
// IsRegex =true,
// StyleId = 0
// },
// new KeywordsStyle
// {
// Keywords = @"(""(?:[^""\\]|\\[\s\S])*""|'(?:[^'\\]|\\[\s\S])*')",// 匹配字符串
// IsRegex=true,
// StyleId = 1
// },
// new KeywordsStyle
// {
// Keywords = @"\b(var|for|if|else|return|this|while|new|function|switch|case|typeof|do|in|throw|try|catch|finally|with|instance|delete|void|break|continue)\b",//匹配关键词,关键词顺序改了下
// IsRegex = true,
// StyleId = 2
// },/*new KeywordsStyle
// {
// Keywords = @"(?:[^\W\d]|\$)[\$\w]*",// 匹配普通的变量名
// IsRegex =true,
// StyleId = 4
// },*/
// //new KeywordsStyle
// //{
// // Keywords = @"(0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|\.\d+(?:[eE][+-]?\d+)?)",// 匹配数字,修复了匹配
// // IsRegex =true,
// // StyleId = -1
// //},
// //new KeywordsStyle
// //{
// // Keywords = @"(?:^|[^\)\]\}])(\/(?!\*)(?:\\.|[^\\\/\n])+?\/[gim]*)",//匹配正则
// // IsRegex =true,
// // StyleId = -1
// //},
// }
// },
new CodeTextBox
{
//FontSize=16,
AcceptsTab=true,
MarginBottom = 22,
MarginRight = 208,
Background = "#FFFFFF",
MarginLeft = 3,
MarginTop = -1,
IsUndoEnabled=true,//Text="231231\n3\n4\n5\n6\n7\n8\n4\n5\n6\n7\n8\n7\n8\n4\n5\n6\n7\n81dfssssssssssssssssssssssssa\n2\n3\n4\n5\n6\n7\n8\n9asddffsfsfs\n10\n11\n12",
Styles=
{
new CodeStyle
{
Foreground = "#008000",//Background="#00ff00",
},
new CodeStyle
{
Foreground = "128,0,0",//Background="#00ffff",
},
new CodeStyle
{
Foreground = "DarkBlue",//Background="#0f0fff",
},
new CodeStyle
{
Foreground = "143,8,196",// Background="#ff00ff",
},
new CodeStyle
{
Foreground = "31,86,173"
},
new CodeStyle
{
Foreground = "#8000FF"
},
new CodeStyle
{
Foreground = "#c3c3fd"
},
},
KeywordsStyles=
{
new KeywordsStyle
{
Keywords = @"\b(var|for|if|else|return|this|while|new|function|switch|case|typeof|do|in|throw|try|catch|finally|with|instance|delete|void|break|continue)\b",//匹配关键词,关键词顺序改了下
IsRegex = true,
StyleId = 2
},
new KeywordsStyle
{
Keywords = @"(\/\/.*|\/\*[\s\S]*?\*\/)",// 匹配注释
IsRegex =true,
StyleId = 0
},
new KeywordsStyle
{
Keywords = @"(""(?:[^""\\]|\\[\s\S])*""|'(?:[^'\\]|\\[\s\S])*')",// 匹配字符串
IsRegex=true,
StyleId = 1
},/*new KeywordsStyle
{
Keywords = @"(?:[^\W\d]|\$)[\$\w]*",// 匹配普通的变量名
IsRegex =true,
StyleId = 4
},*/
//new KeywordsStyle
//{
// Keywords = @"(0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|\.\d+(?:[eE][+-]?\d+)?)",// 匹配数字,修复了匹配
// IsRegex =true,
// StyleId = -1
//},
//new KeywordsStyle
//{
// Keywords = @"(?:^|[^\)\]\}])(\/(?!\*)(?:\\.|[^\\\/\n])+?\/[gim]*)",//匹配正则
// IsRegex =true,
// StyleId = -1
//},
}
},
new TextBox
{
MarginBottom = 22,
MarginTop = 0,
MarginRight = 0,
Width=207,
FontSize = 13,
SelectionFill = "153,201,239",
Text = @"
new TabItemTemplate{
Header = ""pdf"",
Content = new Panel{
Size = new SizeField(""100%"",""100%""),
},
}
",
Background="255,255,255",
Styles=
{
new DocumentStyle
{
Foreground = "#008000"
},
new DocumentStyle
{
Foreground = "128,0,0"
},
new DocumentStyle
{
Foreground = "DarkBlue"
},
new DocumentStyle
{
Foreground = "143,8,196"
},
new DocumentStyle
{
Foreground = "31,86,173"
},
new DocumentStyle
{
Foreground = "#8000FF"
},
new DocumentStyle
{
Foreground = "#c3c3fd"
},
},
KeywordsStyles=
{
new KeywordsStyle
{
Keywords = @"\b(var|for|if|else|return|this|while|new|function|switch|case|typeof|do|in|throw|try|catch|finally|with|instance|delete|void|break|continue)\b",//匹配关键词,关键词顺序改了下
IsRegex = true,
StyleId = 2
},
new KeywordsStyle
{
Keywords = @"(\/\/.*|\/\*[\s\S]*?\*\/)",// 匹配注释
IsRegex =true,
StyleId = 0
},
new KeywordsStyle
{
Keywords = @"(""(?:[^""\\]|\\[\s\S])*""|'(?:[^'\\]|\\[\s\S])*')",// 匹配字符串
IsRegex=true,
StyleId = 1
},//new KeywordsStyle
//{
// Keywords = @"(?:[^\W\d]|\$)[\$\w]*",// 匹配普通的变量名
// IsRegex =true,
// StyleId = 4
//},
//new KeywordsStyle
//{
// Keywords = @"(0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|\.\d+(?:[eE][+-]?\d+)?)",// 匹配数字,修复了匹配
// IsRegex =true,
// StyleId = -1
//},
//new KeywordsStyle
//{
// Keywords = @"(?:^|[^\)\]\}])(\/(?!\*)(?:\\.|[^\\\/\n])+?\/[gim]*)",//匹配正则
// IsRegex =true,
// StyleId = -1
//},
}
}
},
},
},
new TabItemTemplate
{
2023-11-27 15:57:46 +08:00
Header="多级绑定",
2023-11-21 23:05:03 +08:00
Content=new Panel
{
2023-11-27 15:57:46 +08:00
Name = "多级绑定",
2023-11-21 23:05:03 +08:00
PresenterFor = this,
Width="100%",
Height="100%",
Children=
{
new StackPanel
{
MarginLeft=10,
MarginTop=10,
Orientation= Orientation.Vertical,
Children=
{
2023-11-27 15:57:46 +08:00
new TextBlock
2023-11-21 23:05:03 +08:00
{
2023-11-27 15:57:46 +08:00
[nameof(TextBlock.Text)]= new Obx<MainModel>(a => a.Test1.test.test.test.test.Name,
BindingMode.OneWay),
Name = "hmbb"
},//new TextBox
2023-11-29 10:59:22 +08:00
//{
// Width = 130,
// Height= 60,
// Background =Color.Gray,
// [nameof(TextBox.Text)]= new Obx<MainModel>(a => a.Test1.test.test.test.test.Name,
// BindingMode.OneWayToSource),
//},
2023-11-21 23:05:03 +08:00
new Button
{
2023-11-28 12:45:15 +08:00
Content="创建对象",
2023-11-27 15:57:46 +08:00
[nameof(Button.Click)]=new CommandDescribe((s,e)=>
2023-11-21 23:05:03 +08:00
{
2023-11-28 12:45:15 +08:00
data a = new data();
a.test.test.test.Name = "666666";
(DataContext as MainModel).Test1.test = a;
})
},
new Button
{
Content="删除对象",
[nameof(Button.Click)]=new CommandDescribe((s,e)=>
{
(DataContext as MainModel).Test1.test.test = null;
})
},
new Button
{
Content="添加对象",
[nameof(Button.Click)]=new CommandDescribe((s,e)=>
{
data a = new data();
2023-11-29 21:06:01 +08:00
a.test.test.Name = "8888";
2023-11-28 12:45:15 +08:00
(DataContext as MainModel).Test1.test.test = a;
2023-11-27 15:57:46 +08:00
})
2023-11-21 23:05:03 +08:00
},
}
},
}
}
},
new TabItemTemplate
{
Header="布局",
Content=new Panel
{
Name = "布局",
PresenterFor = this,
Width="100%",
Height="100%",
Children=
{
new StackPanel
{
MarginLeft=10,
MarginTop=10,
Orientation= Orientation.Vertical,
Children=
{
new Button
{
Content="StackPanel的Vertical"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
}
},
new StackPanel
{
BorderStroke = "5,Solid",
BorderFill = "#B4B4B4",
MarginLeft=80,
MarginTop=50,
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="StackPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
}
},
new WrapPanel
{
MarginRight=10,
MarginTop=10,
Width="50%",
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="WrapPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
new Button
{
Content="宽度不够"
},
new Button
{
Content="可以自动换行"
},
}
},
new Grid
{
RenderTransform=new RotateTransform(10),
Name="testGrid",
Background="#999",
Width="80%",
Height="60%",
MarginTop=120,
MarginLeft=20,
ColumnDefinitions=
{
new ColumnDefinition
{
Width="40*"
},
new ColumnDefinition
{
Width = "30*"
},
new ColumnDefinition
{
Width="200",
[nameof(ColumnDefinition.Width)]=nameof(MainModel.ColumnWidth)
},
},
RowDefinitions=
{
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
}
},
Children=
{
new WrapPanel
{
Name="test",
Background="#a2f",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="水平浮动布局231"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
{
new WrapPanel
{
Orientation= Orientation.Vertical,
Background="#27a",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="垂直浮动布局"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
1,
1
},
{
new TextBlock
{
Background="#ac2",
Width="100%",
Height="100%",
Text="Grid布局。。。"
},
2,
1
},
{
new Panel
{
Background="#b1a",
MarginLeft=0,
MarginRight=0,
Children=
{
new Button
{
Content="跨列",
Width="50%"
}
}
},
0,
2,
2
},
{
new TextBlock
{
Background="#186",
Height="100%",
Text="跨行"
},
2,
1,
1,
2
},
new TextBox
{
MarginLeft=10,
Size=SizeField.Fill,
Text="元素变换,可以旋转,倾斜,缩放等操作",
Attacheds=
{
{
Grid.ColumnIndex,
1
}
}
},
new Button
{
Content=new SVG("res://ConsoleApp1/test.svg")
{
MarginLeft = 0,
MarginTop = 0,
Height = 85,
Width=170,
Stretch= Stretch.Uniform,
},
Width=104,
Height=55,
MarginLeft=60,
MarginTop=120,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s)
}
}
}
},
},
new DockPanel
{
LastChildFill = false,
Width=200,
Height=200,
MarginRight=0,
MarginTop=50,
Background="#f00",
Children =
{
new Button
{
Content="Right",
Height="100%",
Attacheds =
{
{
DockPanel.Dock,
Dock.Right
}
}
},
}
},
new Slider
{
Maximum = 300,
Value = 200,
MarginLeft = 252,
MarginTop = 76,
Height = 23,
Width = 219,
[nameof(Slider.Value)]=new BindingDescribe(null, nameof(MainModel.ColumnWidth),BindingMode.OneWayToSource,null,a=>new GridLength((float)(double)a))
},
}
}
},
new TabItemTemplate
{
Header="布局",
Content=new Panel
{
Name = "布局",
PresenterFor = this,
Width="100%",
Height="100%",
Children=
{
new StackPanel
{
MarginLeft=10,
MarginTop=10,
Orientation= Orientation.Vertical,
Children=
{
new Button
{
Content="StackPanel的Vertical"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
}
},
new StackPanel
{
BorderStroke = "5,Solid",
BorderFill = "#B4B4B4",
MarginLeft=80,
MarginTop=50,
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="StackPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
}
},
new WrapPanel
{
MarginRight=10,
MarginTop=10,
Width="50%",
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="WrapPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
new Button
{
Content="宽度不够"
},
new Button
{
Content="可以自动换行"
},
}
},
new Grid
{
RenderTransform=new RotateTransform(10),
Name="testGrid",
Background="#999",
Width="80%",
Height="60%",
MarginTop=120,
MarginLeft=20,
ColumnDefinitions=
{
new ColumnDefinition
{
Width="40*"
},
new ColumnDefinition
{
Width = "30*"
},
new ColumnDefinition
{
Width="200",
[nameof(ColumnDefinition.Width)]=nameof(MainModel.ColumnWidth)
},
},
RowDefinitions=
{
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
}
},
Children=
{
new WrapPanel
{
Name="test",
Background="#a2f",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="水平浮动布局231"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
{
new WrapPanel
{
Orientation= Orientation.Vertical,
Background="#27a",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="垂直浮动布局"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
1,
1
},
{
new TextBlock
{
Background="#ac2",
Width="100%",
Height="100%",
Text="Grid布局。。。"
},
2,
1
},
{
new Panel
{
Background="#b1a",
MarginLeft=0,
MarginRight=0,
Children=
{
new Button
{
Content="跨列",
Width="50%"
}
}
},
0,
2,
2
},
{
new TextBlock
{
Background="#186",
Height="100%",
Text="跨行"
},
2,
1,
1,
2
},
new TextBox
{
MarginLeft=10,
Size=SizeField.Fill,
Text="元素变换,可以旋转,倾斜,缩放等操作",
Attacheds=
{
{
Grid.ColumnIndex,
1
}
}
},
new Button
{
Content=new SVG("res://ConsoleApp1/test.svg")
{
MarginLeft = 0,
MarginTop = 0,
Height = 85,
Width=170,
Stretch= Stretch.Uniform,
},
Width=104,
Height=55,
MarginLeft=60,
MarginTop=120,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s)
}
}
}
},
},
new DockPanel
{
LastChildFill = false,
Width=200,
Height=200,
MarginRight=0,
MarginTop=50,
Background="#f00",
Children =
{
new Button
{
Content="Right",
Height="100%",
Attacheds =
{
{
DockPanel.Dock,
Dock.Right
}
}
},
}
},
new Slider
{
Maximum = 300,
Value = 200,
MarginLeft = 252,
MarginTop = 76,
Height = 23,
Width = 219,
[nameof(Slider.Value)]=new BindingDescribe(null, nameof(MainModel.ColumnWidth),BindingMode.OneWayToSource,null,a=>new GridLength((float)(double)a))
},
}
}
},
new TabItemTemplate
{
Header="布局",
Content=new Panel
{
Name = "布局",
PresenterFor = this,
Width="100%",
Height="100%",
Children=
{
new StackPanel
{
MarginLeft=10,
MarginTop=10,
Orientation= Orientation.Vertical,
Children=
{
new Button
{
Content="StackPanel的Vertical"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
new Button
{
Content="按钮"
},
}
},
new StackPanel
{
BorderStroke = "5,Solid",
BorderFill = "#B4B4B4",
MarginLeft=80,
MarginTop=50,
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="StackPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
}
},
new WrapPanel
{
MarginRight=10,
MarginTop=10,
Width="50%",
Orientation= Orientation.Horizontal,
Children=
{
new Button
{
Content="WrapPanel的Horizontal"
},
new Button
{
Content="按钮"
},
new Button
{
Content="Margin调间距",
MarginLeft=5
},
new Button
{
Content="按钮"
},
new Button
{
Content="宽度不够"
},
new Button
{
Content="可以自动换行"
},
}
},
new Grid
{
RenderTransform=new RotateTransform(10),
Name="testGrid",
Background="#999",
Width="80%",
Height="60%",
MarginTop=120,
MarginLeft=20,
ColumnDefinitions=
{
new ColumnDefinition
{
Width="40*"
},
new ColumnDefinition
{
Width = "30*"
},
new ColumnDefinition
{
Width="200",
[nameof(ColumnDefinition.Width)]=nameof(MainModel.ColumnWidth)
},
},
RowDefinitions=
{
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
},
new RowDefinition
{
Height="30*"
}
},
Children=
{
new WrapPanel
{
Name="test",
Background="#a2f",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="水平浮动布局231"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
{
new WrapPanel
{
Orientation= Orientation.Vertical,
Background="#27a",
Width="100%",
Height="100%",
Children=
{
new Button
{
Content="垂直浮动布局"
},
new Button
{
Content="按钮2"
},
new Button
{
Content="按钮3"
},
new Button
{
Content="按钮4"
},
new Button
{
Content="按钮5"
},
}
},
1,
1
},
{
new TextBlock
{
Background="#ac2",
Width="100%",
Height="100%",
Text="Grid布局。。。"
},
2,
1
},
{
new Panel
{
Background="#b1a",
MarginLeft=0,
MarginRight=0,
Children=
{
new Button
{
Content="跨列",
Width="50%"
}
}
},
0,
2,
2
},
{
new TextBlock
{
Background="#186",
Height="100%",
Text="跨行"
},
2,
1,
1,
2
},
new TextBox
{
MarginLeft=10,
Size=SizeField.Fill,
Text="元素变换,可以旋转,倾斜,缩放等操作",
Attacheds=
{
{
Grid.ColumnIndex,
1
}
}
},
new Button
{
Content=new SVG("res://ConsoleApp1/test.svg")
{
MarginLeft = 0,
MarginTop = 0,
Height = 85,
Width=170,
Stretch= Stretch.Uniform,
},
Width=104,
Height=55,
MarginLeft=60,
MarginTop=120,
Commands=
{
{
nameof(Button.Click),
(s,e)=> Animation((Button)s)
}
}
}
},
},
new DockPanel
{
LastChildFill = false,
Width=200,
Height=200,
MarginRight=0,
MarginTop=50,
Background="#f00",
Children =
{
new Button
{
Content="Right",
Height="100%",//Attacheds =
//{
// {
// DockPanel.Dock,
// Dock.Right
// }
//},
[DockPanel.Dock] = Dock.Right,
}
.Assign(out var testBtn),
}
},
new Slider
{
Maximum = 300,
Value = 200,
MarginLeft = 252,
MarginTop = 76,
Height = 23,
Width = 219,
[nameof(Slider.Value)]=new BindingDescribe(null, nameof(MainModel.ColumnWidth),BindingMode.OneWayToSource,null,a=>new GridLength((float)(double)a))
},
}
}
}
},//SelectedIndex=1
}
}
})
{
MaximizeBox = true,
ShadowBlur = 10,
#if !DesignMode
2023-11-21 23:05:03 +08:00
//Effect = effect
#endif
});
//#if !Net4 && !NETCOREAPP3_0
2023-11-29 21:06:01 +08:00
// Children.Add(new GLView
// {
// Height = "30%",
// Width = "30%",
// IsAntiAlias = true,
// });
//#endif
2023-11-21 23:05:03 +08:00
LoadStyleFile("res://ConsoleApp1/Stylesheet3.css");
//加载样式文件,文件需要设置为内嵌资源
Console.WriteLine(testBtn[DockPanel.Dock]);
if (!DesignMode)//设计模式下不执行
{
//var type = Grid.ColumnIndex.GetType();
//var f = typeof(Grid).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
//var attached = f[0].GetValue(null, null);
//var pt = typeof(CPF.OptionalParameter<>).MakeGenericType(f[0].PropertyType.GetGenericArguments());
//var v = (attached as Delegate).DynamicInvoke(this, Activator.CreateInstance(pt));
//var p = typeof(Grid).GetProperty("Grid.RowIndex", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
}
}
CPF.Controls.Switch _sw;
DataGrid testDataGrid;
DataGrid testGrid;
TreeView testTreeVIew;
Button btn;
Panel page1;
ComboBox combox;
ComboBox testCombobox;
Picture pic;
StackPanel stackPanel;
TextBox textBox;
public float TestValue
{
get { return GetValue<float>(); }
set { SetValue(value); }
}
//PathGeometry pathGeometry = "M159.375 196.875A9.375 9.375 0 0 1 140.625 196.875V133.8375L113.83125 89.2125A9.375 9.375 0 1 1 129.91875 79.55625L158.04375 126.43125A9.375 9.375 0 0 1 159.375 131.25V196.875zM121.875 300A9.375 9.375 0 0 1 121.875 281.25H131.25V261.1875A131.26875 131.26875 0 0 1 69.88125 27.3L58.59375 16.0125A9.375 9.375 0 0 1 71.85 2.7375L85.8375 16.725A130.6875 130.6875 0 0 1 150 0A130.6875 130.6875 0 0 1 214.1625 16.725L228.15 2.7375A9.375 9.375 0 0 1 241.4062500000001 16.0125L230.1375 27.3A131.26875 131.26875 0 0 1 168.75 261.1875V281.25H178.125A9.375 9.375 0 0 1 178.125 300H121.875zM141.3375 243.4125A114.24375 114.24375 0 0 0 158.6625 243.4125A112.5 112.5 0 1 0 141.3375 243.4125zM0 234.375C0 220.25625 6.24375 207.58125 16.125 198.99375A150.65625 150.65625 0 0 0 82.25625 265.125A46.875 46.875 0 0 1 0 234.375zM253.125 281.25C239.00625 281.25 226.33125 275.00625 217.74375 265.125A150.65625 150.65625 0 0 0 283.875 198.99375A46.875 46.875 0 0 1 253.125 281.25z";
//Stopwatch stopwatch = new Stopwatch();
//int frameCount;
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
//frameCount++;
//if (stopwatch.ElapsedMilliseconds >= 500)
//{
// Debug.WriteLine(frameCount * 1000 / stopwatch.ElapsedMilliseconds);
// stopwatch.Restart();
// frameCount = 0;
//}
//else if (!stopwatch.IsRunning)
//{
// stopwatch.Start();
//}
//dc.DrawPath("#f00", new Stroke(1), pathGeometry);
}
protected override void OnElementInitialize(UIElement element)
{
if (element is Button button)
{
button.SetTemplate((s, c) =>
{
c.Add(new StackPanel
{
Orientation = Orientation.Horizontal,
Children =
{
new Ellipse { Width = 15, Height = 15,IsAntiAlias=true,Fill="#f00" },
new Border
{
Name = "contentPresenter",
Height = "100%",
BorderFill = null,
PresenterFor = s,
},
}
});
});
}
if (element.Tag == null)
{
element.Tag = 1;
}
else
{
element.Tag = 1 + (int)element.Tag;
}
base.OnElementInitialize(element);
}
[PropertyMetadata(-1)]
public int SelectIndex
{
get { return GetValue<int>(); }
set { SetValue(value); }
}
public Collection<TestClass> List1
{
get { return GetValue<Collection<TestClass>>(); }
set { SetValue(value); }
}
public Collection<TestClass> List2
{
get { return GetValue<Collection<TestClass>>(); }
set { SetValue(value); }
}
void test()
{
//var panel = this.FindPresenter<StackPanel>().First(a => a.Name == "testPanel");
//Stopwatch stopwatch = new Stopwatch();
//stopwatch.Start();
//panel.Children.DisposeChildren();
//Debug.WriteLine("清除:" + stopwatch.ElapsedMilliseconds);
//System.Threading.Thread.Sleep(1000);
//stopwatch.Restart();
//for (int i = 0; i < 1000; i++)
//{
// panel.Children.Add(new Button { Content = "test测试", Width = 100, Height = 50 });
//}
//stopwatch.Stop();
//Debug.WriteLine("添加:" + stopwatch.ElapsedMilliseconds);
}
protected async override void OnInitialized()
{
//testTreeVIew.Items = Nodes;
//(DataContext as MainModel).TestItems1 = new Collection<string>();
//for (int i = 0; i < 10; i++)
//{
// (DataContext as MainModel).TestItems1.Add(i.ToString());
//}
_sw = FindPresenterByName<CPF.Controls.Switch>(nameof(_sw));
_sw.IsChecked = true;
base.OnInitialized();
Items = new Collection<ItemData>();
for (int i = 0; i < 100; i++)
{
Items.Add(new ItemData { Name = "马大云" + i, Introduce = "哈哈---" + i });
}
//Columns.Add(new DataGridTextColumn { Header = "任务名称", Width = "60*", CanUserSort = false });
//Columns.Add(new DataGridTextColumn { Header = "", Width = "20*", CanUserSort = false });
CPF.Styling.ResourceManager.GetImage("res://ConsoleApp1/Resources/主页.png", a =>
{
var data = new DataTable();
for (int i = 0; i < 9; i++)
{
data.Columns.Add("p" + (i + 1).ToString());
}
data.Columns[1].DataType = typeof(bool);
data.Columns[3].DataType = typeof(int);
data.Columns[5].DataType = typeof(Image);
data.Columns[7].DataType = typeof(Button);
for (int i = 0; i < 180; i++)
{
var row = data.NewRow();
for (int j = 0; j < 9; j++)
{
if (j != 1)
{
if (j == 5)
{
row[j] = a;
}
else if (j == 7)
{
row[7] = new Button { Content = "test" + i, Width = "100%" };
}
else
{
row[j] = i;
}
}
}
row[0] = i % 3;
row[1] = true;
data.Rows.Add(row);
}
Data = data.ToItems();
});
Icon = await CPF.Styling.ResourceManager.GetImage("res://ConsoleApp1/Resources/icon.png");
textBox = FindPresenterByName<TextBox>(nameof(textBox));
stackPanel = FindPresenterByName<StackPanel>(nameof(stackPanel));
//for (int i = 0; i < 50000; i++)
//{
// stackPanel.Children.Add(new Button { Content="test"});
//}
pic = FindPresenterByName<Picture>(nameof(pic));
btn = FindPresenterByName<Button>(nameof(btn));
//textBox.Background = new VisualFill(btn);
#if !Net4
//var m = Observable.FromEventPattern<MouseButtonEventArgs>(this, nameof(MouseDown));
//var m = this.Observe<Window, MouseButtonEventArgs>(nameof(MouseDown));
//m.Subscribe(args =>
//{
// Debug.WriteLine(args.EventArgs.MouseButton);
//});
#endif
//var newValueParameter = Expression.Parameter(typeof(string), "value");
////var instanceParameter = Expression.Parameter(Type, "instance");
//var method = Type.GetMethod(nameof(TestSetValue), BindingFlags.Instance | BindingFlags.NonPublic);
//var methodCall = Expression.Call(Expression.Constant(this), method, newValueParameter, Expression.Constant((byte)1));
//var lambda = Expression.Lambda<Action<string>>(methodCall, newValueParameter);
//var tpSet = Type.GetProperty(nameof(TestProperty)).GetSetMethod();
////var tpSet = Type.GetMethod(nameof(TestSet1), BindingFlags.Static | BindingFlags.NonPublic);
////var set = Type.GetMethod(nameof(TestSet), BindingFlags.Instance | BindingFlags.NonPublic);
//var action = lambda.Compile();
//var set = action.Method;
////var h = GetDynamicMethodRuntimeHandle(set);
//var setValue = Type.GetMethod(nameof(TestSetValue), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, null, new Type[] { typeof(object), typeof(byte).Assembly.GetType("System.Byte&") }, null);
////因为你是作为Instance 方法,那么对于DynamicMethod 第一个参数就应该是This
//DynamicMethod mt = new DynamicMethod(string.Empty, typeof(void), new Type[] { typeof(object), typeof(string) });
//var il = mt.GetILGenerator();
//LocalBuilder loc = il.DeclareLocal(typeof(byte), true);
//il.Emit(OpCodes.Ldc_I4, 83);
//il.Emit(OpCodes.Conv_Ovf_U1);
//il.Emit(OpCodes.Stloc, loc.LocalIndex);
////SetValue(Value, PropertyIndex);
////Stack
////CpfObject This
////Value
////Index ref
//il.Emit(OpCodes.Ldarg_0);
//il.Emit(OpCodes.Ldarg_1);
//il.Emit(OpCodes.Ldloca, loc.LocalIndex);
//il.Emit(OpCodes.Callvirt, setValue);
//if (setValue.ReturnType != typeof(void))
// il.Emit(OpCodes.Pop);
//il.Emit(OpCodes.Ret);
//var ha = mt.CreateDelegate(typeof(Action<string>), this);
////((Action<string>)ha)("231");
////var m_scope = il.GetType().GetField("m_scope", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(il);
////var m_tokens = m_scope.GetType().GetField("m_tokens", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(m_scope);
////RuntimeMethodHandle handle = (RuntimeMethodHandle)(m_tokens as IList)[2];
//var h = GetDynamicMethodRuntimeHandle(mt);
//RedirectTo(tpSet, h);
//TestProperty = "test";
//TestSet1("test");
testCombobox = FindPresenterByName<ComboBox>(nameof(testCombobox));
//for (int i = 0; i < 300; i++)
//{
// testCombobox.Items.Add((i.ToString(), i));
//}
combox = FindPresenterByName<ComboBox>(nameof(combox));
page1 = FindPresenterByName<Panel>(nameof(page1));
//for (int i = 0; i < 10; i++)
//{
// combox.Items.Add(i.ToString());
//}
#if !Net4
if (!DesignMode)
{
effect.TransitionValue(nameof(ThreeDEffect2.Y), 0f, TimeSpan.FromSeconds(0.6), null, AnimateMode.Linear, () =>
{
Find<WindowFrame>().First().Effect = null;
});
}
#endif
testTreeVIew = FindPresenterByName<TreeView>(nameof(testTreeVIew));
//WindowState = WindowState.Maximized;
testGrid = FindPresenterByName<DataGrid>(nameof(testGrid));
testDataGrid = FindPresenterByName<DataGrid>(nameof(testDataGrid));
textBox.Document.Children[2].StyleId = 0;
#if !DesignMode && !Net4
//PdfDocument doc = PdfReader.Open(System.IO.Path.Combine(CPF.Platform.Application.StartupPath, "test.pdf"), PdfDocumentOpenMode.ReadOnly);
//foreach (var page in doc.Pages)
//{
// foreach (var item in Find(page))
// {
// Debug.WriteLine(item.Value.GetType());
// if (item.Value is PdfSharpCore.Pdf.Advanced.PdfReference reff)
// {
// }
// else if (item.Value is PdfSharpCore.Pdf.PdfDictionary dic)
// {
// }
// }
//}
#endif
}
//private void ExistValue(string strName, string strFieldValue)
//{
// Dictionary<string, object> dic = new Dictionary<string, object>();
// if (dic.ContainsKey(strName))
// dic[strName] = strFieldValue;
//}
async void PDF(CpfObject obj, RoutedEventArgs eventArgs)
{
#if !DesignMode && !Net4
Debug.WriteLine((obj as Button).PointToView(new Point()).ToString());
//var file = await new BrowseFileWindow { Title="文件选择" }.ShowDialog();
//if (file is string str)
//{
// Console.WriteLine(str);
//}
//else
//{
// Console.WriteLine("未选中");
//}
//System.Diagnostics.Process p = new System.Diagnostics.Process();
//p.StartInfo.FileName = "cmd.exe";
//p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
//p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
//p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
//p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
////p.StartInfo.CreateNoWindow = true;//不显示程序窗口
//p.Start();//启动程序
////向cmd窗口发送输入信息
//p.StandardInput.WriteLine("dotnet \"D:\\xhm\\Documents\\Visual Studio 2019\\ConsoleApp1\\ConsoleApp1\\bin\\Debug\\netcoreapp3.0\\ConsoleApp1.dll\"");
//p.StandardInput.AutoFlush = true;
//Process.Start(new ProcessStartInfo
//{
// UseShellExecute = true,
// FileName = "D:/xhm/Documents/Visual Studio 2019/ConsoleApp1/ConsoleApp1/bin/Debug/netcoreapp3.0/test.pdf"
//});
//using (var dialog = new OpenFileDialog { Title = "打开PDF", Filters = { new FileDialogFilter { Extensions = "pdf", Name = "PDF" } } })
//{
// var file = await dialog.ShowAsync(this);
// if (file != null && file.Length > 0)
// {
// using (PdfDocument document = PdfDocument.Open(file[0]))
// {
// //foreach (var page in document.GetPages())
// var page = document.GetPage(1);
// {
// using (var bmp = new Bitmap((int)page.Width, (int)page.Height))
// {
// using (var dc = DrawingContext.FromBitmap(bmp))
// {
// dc.Clear(Color.White);
// dc.AntialiasMode = AntialiasMode.AntiAlias;
// using (var sb = new SolidColorBrush("#000"))
// {
// //string pageText = page.Text;
// foreach (var item in page.Letters)
// {
// dc.DrawString(new Point((float)item.Location.X, (float)page.Height - (float)item.Location.Y), sb, item.Value, new Font(item.FontName, (float)item.PointSize));
// }
// }
// }
// using (var stream = System.IO.File.OpenWrite(System.IO.Path.Combine(CPF.Platform.Application.StartupPath, "test.png")))
// {
// bmp.SaveToStream(ImageFormat.Png, stream);
// }
// //Debug.WriteLine(pageText);
// //foreach (var word in page.GetWords())
// //{
// // Console.WriteLine(word.Text);
// //}
// }
// }
// }
// }
//}
// using (var connection = new Microsoft.Data.Sqlite.SqliteConnection($"Data Source={System.IO.Path.Combine(CPF.Platform.Application.StartupPath, "hello.db")}"))
// {
// connection.Open();
// //var dataAdapter = new SqliteDataAdapter("",connection);
//// var command = connection.CreateCommand();
//// command.CommandText =
//// @"
//// SELECT name
//// FROM user
//// WHERE id = $id
////";
//// command.Parameters.AddWithValue("$id", id);
//// using (var reader = command.ExecuteReader())
//// {
//// while (reader.Read())
//// {
//// var name = reader.GetString(0);
//// Console.WriteLine($"Hello, {name}!");
//// }
//// }
// }
#endif
}
bool TestSetValue(object value, in byte index)
{
MessageBox.Show(index + value.ToString());
return true;
}
void TestSet(string text)
{
MessageBox.Show(text);
//throw new Exception(text);
//Debug.WriteLine(text);
}
static void TestSet1(string text)
{
Debug.WriteLine(text + "|test");
}
public string TestProperty
{
get { return GetValue<string>(); }
set { SetValue(value); }
}
//public string TestProperty1
//{
// get { return (string)GetValue(1); }
// set { SetValue(value, 1); }
//}
private static IntPtr GetDynamicMethodRuntimeHandle(MethodBase method)
{
if (!(method is DynamicMethod))
return method.MethodHandle.Value;
var fieldInfo = typeof(DynamicMethod).GetField("m_methodHandle", BindingFlags.NonPublic | BindingFlags.Instance);
if (fieldInfo != null)
{
var m_methodHandle = fieldInfo.GetValue(method);
if (m_methodHandle != null)
{
var value = m_methodHandle.GetType().GetField("m_value", BindingFlags.Public | BindingFlags.Instance).GetValue(m_methodHandle);
return (IntPtr)value.GetType().GetField("m_handle", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(value);
}
}
return method.MethodHandle.Value;
}
public static void RedirectTo(MethodInfo origin, IntPtr newMethod)
{
IntPtr ori = GetMethodAddress(origin);
//IntPtr tar = GetMethodAddress(newMethod);
Marshal.Copy(new IntPtr[] { Marshal.ReadIntPtr(newMethod) }, 0, ori, 1);
}
private static IntPtr GetMethodAddress(MethodInfo mi)
{
const ushort SLOT_NUMBER_MASK = 0xfff; // 3 bytes
const int MT_OFFSET_32BIT = 0x28; // 40 bytes
const int MT_OFFSET_64BIT = 0x40; // 64 bytes
IntPtr address;
// JIT compilation of the method
RuntimeHelpers.PrepareMethod(mi.MethodHandle);
IntPtr md = mi.MethodHandle.Value; // MethodDescriptor address
IntPtr mt = mi.DeclaringType.TypeHandle.Value; // MethodTable address
if (mi.IsVirtual)
{
// The fixed-size portion of the MethodTable structure depends on the process type
int offset = IntPtr.Size == 4 ? MT_OFFSET_32BIT : MT_OFFSET_64BIT;
// First method slot = MethodTable address + fixed-size offset
// This is the address of the first method of any type (i.e. ToString)
IntPtr ms = Marshal.ReadIntPtr(mt + offset);
// Get the slot number of the virtual method entry from the MethodDesc data structure
// Remark: the slot number is represented on 3 bytes
long shift = Marshal.ReadInt64(md) >> 32;
int slot = (int)(shift & SLOT_NUMBER_MASK);
// Get the virtual method address relative to the first method slot
address = ms + (slot * IntPtr.Size);
}
else
{
// Bypass default MethodDescriptor padding (8 bytes)
// Reach the CodeOrIL field which contains the address of the JIT-compiled code
address = md + 8;
}
//var data = mi.GetMethodBody().GetILAsByteArray();
//var data1 = new byte[data.Length];
//Marshal.Copy(Marshal.ReadIntPtr(address), data1, 0, data1.Length);
return address;
}
Control mask;
Storyboard storyboard;
void ShowDialogForm()
{
if (mask == null)
{
mask = new Control { Width = "100%", Height = "100%", Background = "0,0,0,0", Commands = { { nameof(Control.MouseDown), (s, e) => DragMove() } } };
//淡入效果
storyboard = new Storyboard
{
Timelines =
{
new Timeline(1)
{
KeyFrames =
{
new KeyFrame<SolidColorFill>{ Property=nameof(Control.Background), Value="0,0,0,100" }
}
}
}
};
}
this.Children.Add(mask);
storyboard.Start(mask, TimeSpan.FromSeconds(0.3), 1, EndBehavior.Reservations);
#if !DesignMode
var dv = new DialogView(this);
dv.MarginTop = -100;
dv.TransitionValue(nameof(MarginTop), (FloatField)100, TimeSpan.FromSeconds(0.3), new PowerEase { }, AnimateMode.EaseOut);
Children.Add(dv);
#endif
}
public void CloseDialogForm(DialogView dialogView)
{
//采用过渡属性的写法定义淡出效果
mask.TransitionValue(nameof(Control.Background), (SolidColorFill)"0,0,0,0", TimeSpan.FromSeconds(0.3), null, AnimateMode.Linear, () =>
{
this.Children.Remove(mask);
});
dialogView.TransitionValue(nameof(MarginTop), (FloatField)(-100), TimeSpan.FromSeconds(0.3), new PowerEase { }, AnimateMode.EaseIn, () =>
{
this.Children.Remove(dialogView);
});
}
void Animation(Button button, IEase ease)
{
var old = button.MarginTop;
button.TransitionValue(nameof(MarginTop), (FloatField)(button.MarginTop.Value + 150), TimeSpan.FromSeconds(0.8), ease, AnimateMode.EaseIn, () =>
{
button.MarginTop = old;
});
}
/// <summary>
/// 微秒级延迟,会稍有偏差
/// </summary>
/// <param name="time">延迟时间1/毫秒0.0500/500微秒</param>
/// <returns></returns>
public static double delayUs(double time)
{
System.Diagnostics.Stopwatch stopTime = new System.Diagnostics.Stopwatch();
stopTime.Start();
while (stopTime.Elapsed.TotalMilliseconds < time) { }
stopTime.Stop();
return stopTime.Elapsed.TotalMilliseconds;
}
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWaitableTimer(Microsoft.Win32.SafeHandles.SafeWaitHandle hTimer,
[In] ref long pDueTime, int lPeriod, int pfnCompletionRoutine, int lpArgToCompletionRoutine, int fResume);
[DllImport("kernel32.dll")]
public static extern Microsoft.Win32.SafeHandles.SafeWaitHandle CreateWaitableTimerW(int lpTimerAttributes, int bManualReset, int lpTimerName);
static void Ex_Sleep(int us)
{
long duetime;
duetime = -10 * us;
Microsoft.Win32.SafeHandles.SafeWaitHandle hTimer = CreateWaitableTimerW(0, 0, 0);
if (SetWaitableTimer(hTimer, ref duetime, 0, 0, 0, 0))
{
using (EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset))
{
wh.SafeWaitHandle = hTimer;
wh.WaitOne();
}
};
//while (MsgWaitForMultipleObjects(1, &hTimer, 0, -1, 255) != 0)
//{
// MSG msg;
// while (PeekMessageW(&msg, 0, 0, 0, 1))
// {
// TranslateMessage(&msg);
// DispatchMessageW(&msg);
// }
//}
//CloseHandle(hTimer);
}
public static int GetTickCount64()
{
return System.Environment.TickCount;
}
public class Animation_easing
{
/// <summary>
/// 创建缓动动画
/// </summary>
/// <param name="uIElement">控件</param>
/// <param name="nTotalTime">总用时</param>
/// <param name="nInterval">间隔</param>
/// <param name="nStart">开始值</param>
/// <param name="nStop">结束值</param>
public Animation_easing(UIElement uIElement,
int nTotalTime, int nInterval, int nStart, int nStop)
{
var timeThread = new Thread(() =>
{
var Easing = Animator.Tween.Easing_create(Animator.Tween.AnimateMode.Bounce);
var index = 1f;
double nFrameStep = nInterval / nTotalTime;
var nFrameCount = nTotalTime / nInterval;
while (true)
{
var nProcessTime = GetTickCount64();
var i = 1;
List<float> list = new List<float>();
//b初始值
//c终止值
//d 任意应该是用时
//t时间
int b = 60, c = 700, d = 60; float t = 1f;
while (i <= nFrameCount)
{
Ex_Sleep((nInterval - (GetTickCount64() - nProcessTime)) * 1000);
var v = Easing[0](t, b, c, d);
list.Add((float)v);
uIElement.Invoke(() =>
{
/*uIElement.RenderTransform = new GeneralTransform
{
OffsetX = (float)v,
};*/
uIElement.MarginLeft = v;
if (t < d)
{
t += 0.5f;
}
//if (uIElement.MarginLeft.Value >= 700)
//{
// index = -3f;
//}
//if (uIElement.MarginLeft.Value <= 60f)
//{
// index = 3f;
//}
//uIElement.MarginLeft = v;
});
i++;
nProcessTime = GetTickCount64();
}
//break;
//Debug.WriteLine(list);
}
})
{ IsBackground = true, Name = "测试" };
timeThread.Start();
}
};
Storyboard storyboard1;
void Animation(UIElement button)
{
new Animation_easing(button, 1000, 5, 60, 700);
//Task.Factory.StartNew(()=> {
// var text = ResourceManager.GetText("res://ConsoleApp1/Points.json");
// text.Wait();
// var json = CPF.Json.JsonSerializer.ToObject<List<Point>>(text.Result);
// foreach (var item in json)
// {
// Invoke(() => {
// //操作代码
// button.MarginLeft = item.X;
// button.MarginTop = item.Y;
// });
// }
//});
//Task.Factory.StartNew(() => {
// List<Point> points = new List<Point>();
// 轨迹模拟.BezierTool bezier = new 轨迹模拟.BezierTool();
// var size = new Size(826, 548);
// int width1 = (int)size.Width;
// int height1 = (int)size.Height;
// Random rd = new Random();
// Point head = new Point();
// for (int i = 0; i < 20; i++)
// {
// List<Point> MyBezierpoints = new List<Point>();
// if (head.IsEmpty)
// {
// MyBezierpoints.Add(new Point(0, 0));
// MyBezierpoints.Add(new Point(rd.Next(1, width1), rd.Next(1, height1)));
// MyBezierpoints.Add(new Point(rd.Next(1, width1), rd.Next(1, height1)));
// head.X = MyBezierpoints[2].X;
// head.Y = MyBezierpoints[2].Y;
// }
// else
// {
// MyBezierpoints.Add(head);
// MyBezierpoints.Add(new Point(rd.Next(1, width1), rd.Next(1, height1)));
// MyBezierpoints.Add(new Point(rd.Next(1, width1), rd.Next(1, height1)));
// head.X = MyBezierpoints[2].X;
// head.Y = MyBezierpoints[2].Y;
// }
// bezier.DrawMyBezier(MyBezierpoints.ToArray(), button,ref points);
// //bezier.Delay(rd.Next(1, 2) * 1000);
// }
// List<Point> MyBezierpoints1 = new List<Point>();
// MyBezierpoints1.Add(head);
// MyBezierpoints1.Add(new Point(rd.Next(1, width1), rd.Next(1, height1)));
// MyBezierpoints1.Add(new Point(713, 12));
// bezier.DrawMyBezier(MyBezierpoints1.ToArray(), button, ref points);
// var json = JsonSerializer.Serialize<List<Point>>(points);
//});
}
void Animation(Button button)
{
//button.RenderTransform = new GeneralTransform();
//var timeThread = new Thread(()=> {
// float i = 1;
// while (true)
// {
// Thread.Sleep(2);
// Invoke(() => {
// if (button.MarginLeft == 700)
// {
// i = -1f;
// }
// if (button.MarginLeft == 60)
// {
// i = 1f;
// }
// button.MarginLeft += i;
// });
// }
//
//}) { IsBackground = true, Name = "测试" };
//timeThread.Start();
if (storyboard1 == null)
{
storyboard1 = new Storyboard
{
Timelines =
{
new Timeline(0.5f)
{
KeyFrames =
{
new KeyFrame<FloatField>{ Property=nameof(button.MarginLeft), Value=700, AnimateMode= AnimateMode.EaseIn, Ease=new PowerEase() },
//new KeyFrame<GeneralTransform>{ Property=nameof(button.RenderTransform),Value=new GeneralTransform{ OffsetX=700 }, AnimateMode= AnimateMode.EaseIn, Ease=new PowerEase() },
}
},
new Timeline(1)
{
KeyFrames =
{
new KeyFrame<FloatField>{ Property=nameof(button.MarginLeft), Value=60, AnimateMode= AnimateMode.EaseInOut, Ease=new QuadraticEase() },
//new KeyFrame<GeneralTransform>{ Property=nameof(button.RenderTransform),Value=new GeneralTransform{ OffsetX=60 }, AnimateMode= AnimateMode.EaseIn, Ease=new QuadraticEase() },
}
},
//new Timeline(1)
//{
// KeyFrames =
// {
// new KeyFrame<GeneralTransform>{ Property=nameof(button.RenderTransform),Value=new GeneralTransform{ Angle=130,SkewX=0,ScaleY=3 }, AnimateMode= AnimateMode.EaseIn, Ease=new ElasticEase() },
// }
//},
}
};
}
storyboard1.Start(button, TimeSpan.FromSeconds(2), 0);
}
Collection<ItemData> Items
{
get { return GetValue<Collection<ItemData>>(); }
set { SetValue(value); }
}
IList Data
{
get { return GetValue<IList>(); }
set { SetValue(value); }
}
ItemCollection ItemCollection
{
get { return GetValue<ItemCollection>(); }
set { SetValue(value); }
}
public Collection<DataGridColumn> Columns
{
get { return GetValue<Collection<DataGridColumn>>(); }
set { SetValue(value); }
}
//[PropertyChanged(nameof(IsKeyboardFocusWithin))]
//void OnIsKeyboardFocusWithin(object newValue,object oldValue,PropertyMetadataAttribute attribute)
//{
//}
//public B<string> Text
//{
// get { return GetValue<string>(); }
// set { SetValue(value); }
//}
//void TestBinding()
//{
// Text = (nameof(Model.SelectValue), BindingMode.OneWay);
// string text = Text;
//}
static void WritePrivateProfileString(string section, string key,
string val, string filePath)
{
IList<string> text;
if (System.IO.File.Exists(filePath))
{
text = System.IO.File.ReadAllLines(filePath);
int hasSection = -1;
var hasKey = false;
for (int i = 0; i < text.Count; i++)
{
var line = text[i];
if (hasSection < 0 && line.StartsWith("[" + section + "]"))
{
hasSection = i;
}
else if (hasSection >= 0 && line.StartsWith(key + "="))
{
text[i] = key + "=" + val;
hasKey = true;
break;
}
}
if (hasSection < 0)
{
text = new List<string>(text);
text.Add("[" + section + "]");
text.Add(key + "=" + val);
}
else if (!hasKey)
{
text = new List<string>(text);
text.Insert(hasSection + 1, key + "=" + val);
}
}
else
{
text = new string[] { "[" + section + "]", key + "=" + val };
}
System.IO.File.WriteAllLines(filePath, text);
}
static string GetPrivateProfileString(string section, string key, string def, string filePath)
{
if (System.IO.File.Exists(filePath))
{
var text = System.IO.File.ReadAllLines(filePath);
var hasSection = false;
for (int i = 0; i < text.Length; i++)
{
var line = text[i];
if (!hasSection && line.StartsWith("[" + section + "]"))
{
hasSection = true;
}
else if (hasSection && line.StartsWith(key + "="))
{
return line.Substring(key.Length + 1).Trim();
}
}
}
return def;
}
void addItem(CpfObject obj, RoutedEventArgs eventArgs)
{
SelectNode.Nodes.Add(new NodeData { Text = "dfsfs" });
//testTreeVIew.Items = new Collection<TreeViewItem> { new TreeViewItem { Header = "4532" } };
}
public NodeData SelectNode { get { return GetValue<NodeData>(); } set { SetValue(value); } }
public Collection<NodeData> Nodes { get { return GetValue<Collection<NodeData>>(); } set { SetValue(value); } }
void RemoveItem(CpfObject obj, RoutedEventArgs eventArgs)
{
//SelectNode.Parent.Nodes.Remove(SelectNode);
SelectNode.Text = "12313131";
}
void scrollEnd(CpfObject obj, RoutedEventArgs eventArgs)
{
textBox.SelectAll();
}
void TouchDownTest(CpfObject obj, TouchEventArgs eventArgs)
{
Debug.WriteLine(string.Join("、", eventArgs.TouchDevice.GetPositions(obj as UIElement)));
}
void scrollViewerMouseDown(CpfObject obj, MouseButtonEventArgs eventArgs)
{
(obj as UIElement).CaptureMouse();
}
void scrollViewerMouseUp(CpfObject obj, MouseButtonEventArgs eventArgs)
{
(obj as UIElement).ReleaseMouseCapture();
}
public CPF.Documents.Document Document
{
get { return GetValue<CPF.Documents.Document>(); }
set { SetValue(value); }
}
void comboBoxtest(CpfObject obj, RoutedEventArgs eventArgs)
{
page1.ShowLoading("加载。。。", a =>
{
Thread.Sleep(10000);
a.Message = "加载123";
Thread.Sleep(10000);
});
var combobox = obj as ComboBox;
combobox.Items.Clear();
for (int i = 2; i < 10; i++)
{
combobox.Items.Add(i.ToString());
}
combobox.SelectedIndex = 0;
}
void TestComboBox(CpfObject obj, CPFPropertyChangedEventArgs eventArgs)
{
if ((bool)eventArgs.NewValue)
{
var p = typeof(ComboBox).GetProperty("Popup", BindingFlags.Static | BindingFlags.NonPublic);
var popue = p.GetValue(null, null) as Popup;
//popue.LayoutManager.ExecuteLayoutPass();
}
}
CustomScrollData customScrollData = new CustomScrollData
{
DefaultSize = 18,
Custom = new (int, float)[]
{
(8, 180),
(38, 180),
(68, 180)
}
};
void AddTest(CpfObject obj, RoutedEventArgs eventArgs)
{
var data = Data.GetDataTable();
var row = data.NewRow();
for (int j = 0; j < 9; j++)
{
if (j != 1)
{
if (j == 5)
{
row[j] = (Image)"res://ConsoleApp1/Resources/主页.png";
}
else if (j == 7)
{
row[7] = new Button { Content = "test" + data.Rows.Count, Width = "100%" };
}
else
{
row[j] = data.Rows.Count;
}
}
}
row[0] = data.Rows.Count % 3;
row[1] = true;
//var customData = new List<(object obj, float size)>();
////先获取原来索引对应的数据
//foreach (var item in customScrollData.Custom)
//{
// var _item = ItemCollection[item.index];
// customData.Add((_item, item.size));
//}
data.Rows.Add(row);
////添加完数据后再获取新的索引更新到customScrollData
//List<(int index, float size)> list = new List<(int index, float size)>();
//foreach (var item in customData)
//{
// var index = ItemCollection.IndexOf(item.obj);
// if (index > -1)
// {
// list.Add((index, item.size));
// }
//}
//customScrollData.Custom = list.OrderBy(a => a.index);
//if (column.Width.IsStar)
//{
// column.Width = 100;
//}
//column.Width = column.Width.Value + 1;
}
void testHandled(CpfObject obj, MouseButtonEventArgs eventArgs)
{
}
void TestHandled1(CpfObject obj, MouseButtonEventArgs eventArgs)
{
}
void svgMouseUP(CpfObject obj, MouseButtonEventArgs eventArgs)
{
MessageBox.Show("test");
}
void lineMouseDown(CpfObject obj, MouseButtonEventArgs eventArgs)
{
}
Popup popup;
void ShowPopup(CpfObject obj, MouseButtonEventArgs eventArgs)
{
Console.WriteLine(Root.InputManager.KeyboardDevice.Modifiers);
Debug.WriteLine(Root.InputManager.KeyboardDevice.Modifiers);
if (popup == null)
{
popup = new Popup
{
CanActivate = true,
StaysOpen = true,
Placement = PlacementMode.Padding,
PlacementTarget = obj as UIElement,
MarginTop = -10,
Children =
{
new Component1{ }
},
Commands =
{
{nameof(UIElement.LostFocus),(s,e)=>{
popup.Hide();
} },
{nameof(UIElement.GotFocus),(s,e)=>{
popup.Width="auto";
popup.Height="auto";
} }
}
};
}
popup.Show();
}
void textFocus(CpfObject obj, CPFPropertyChangedEventArgs eventArgs)
{
//textBox.Text = "";
}
void ShowLayer(CpfObject obj, RoutedEventArgs eventArgs)
{
new Window2 { DataContext = DataContext, CommandContext = CommandContext }.Show();
//new LayerDialog { Content = }.ShowDialog(this);
}
void TestClear(CpfObject obj, RoutedEventArgs eventArgs)
{
//Items = new Collection<ItemData>() { new ItemData { Name = "231", Introduce = "fgsa" } };
Items.Clear();
Items.Add(new ItemData { Name = "231", Introduce = "fgsa" });
Items.Add(new ItemData { Name = "2341", Introduce = "f2gsa" });
Items.Add(new ItemData { Name = "2331", Introduce = "fg54sa" });
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
}
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
}
void addColumnClick(CpfObject obj, RoutedEventArgs eventArgs)
{
testGrid.Columns.Add(new DataGridTextColumn { Width = 100, Header = "test" });
}
void ClearData(CpfObject obj, RoutedEventArgs eventArgs)
{
Data.GetDataTable().Clear();
}
void addColumn(CpfObject obj, RoutedEventArgs eventArgs)
{
testDataGrid.Columns.Add(new DataGridTextColumn { Binding = "p" + (testDataGrid.Columns.Count + 1), Header = "p" + (testDataGrid.Columns.Count + 1), Width = "100" });
}
void KeyDownTest(CpfObject obj, KeyEventArgs eventArgs)
{
//Close();
}
//protected override void OnClosing(ClosingEventArgs e)
//{
// base.OnClosing(e);
// var f = new Window5();
// f.ShowDialogSync();
// e.Cancel = true;
//}
}
}