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" ,
2023-11-29 16:38:58 +08:00
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"
//}
2023-11-29 16:38:58 +08:00
#if ! Net4 & & ! NETCOREAPP3_0
new GLView
{
Height = 336 ,
Width = 421 ,
2023-11-29 21:06:01 +08:00
IsAntiAlias = true ,
2023-11-29 16:38:58 +08:00
} ,
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-12-03 23:47:52 +08:00
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
} ,
2023-11-29 16:38:58 +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 ,
} ,
2023-12-03 23:47:52 +08:00
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 ,
2023-11-29 16:38:58 +08:00
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-12-03 23:47:52 +08:00
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"
2023-11-29 16:38:58 +08:00
} , //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 ,
2023-12-03 23:47:52 +08:00
#if ! DesignMode
2023-11-21 23:05:03 +08:00
//Effect = effect
#endif
} ) ;
2023-12-03 23:47:52 +08:00
//#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;
//}
}
}