mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-04-05 17:37:51 +08:00
1
This commit is contained in:
parent
763a3893d6
commit
2004876770
@ -23,7 +23,7 @@ namespace CPF.Toolkit.Demo
|
||||
this.Width = 1280;
|
||||
this.Height = 720;
|
||||
this.Background = null;
|
||||
this.Children.Add(new WindowFrame(this, new Panel
|
||||
var frame = this.Children.Add(new WindowFrame(this, new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Background = "204,204,204",
|
||||
@ -32,13 +32,23 @@ namespace CPF.Toolkit.Demo
|
||||
new MdiWindow
|
||||
{
|
||||
Title = "test",
|
||||
Content = new Button
|
||||
{
|
||||
Content = "test"
|
||||
},
|
||||
//Content = new WrapPanel
|
||||
//{
|
||||
// Children =
|
||||
// {
|
||||
// new Button{ Content = "test" ,Width = 100, Height = 35 },
|
||||
// new Button{ Content = "test" ,Width = 100, Height = 35 },
|
||||
// new Button{ Content = "test" ,Width = 100, Height = 35 },
|
||||
// new Button{ Content = "test" ,Width = 100, Height = 35 },
|
||||
// },
|
||||
//},
|
||||
}
|
||||
}
|
||||
}));
|
||||
frame.CaptionBackgrund = "white";
|
||||
frame.CaptionForeground = "black";
|
||||
frame.ControlBoxStroke = "black";
|
||||
frame.MaximizeBox = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
223
CPF.Toolkit/Controls/MdiFrame.cs
Normal file
223
CPF.Toolkit/Controls/MdiFrame.cs
Normal file
@ -0,0 +1,223 @@
|
||||
using CPF.Controls;
|
||||
using CPF.Drawing;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace CPF.Toolkit.Controls
|
||||
{
|
||||
internal class MdiFrame : Control
|
||||
{
|
||||
public MdiFrame()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
protected override void InitializeComponent()
|
||||
{
|
||||
this.Children.Add(new Grid
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
RowDefinitions =
|
||||
{
|
||||
new RowDefinition{ Height = 35 },
|
||||
new RowDefinition{ },
|
||||
},
|
||||
Children =
|
||||
{
|
||||
new Thumb
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Background = new LinearGradientFill
|
||||
{
|
||||
EndPoint = "0,100%",
|
||||
GradientStops =
|
||||
{
|
||||
new GradientStop("152,180,208",0),
|
||||
new GradientStop("181,206,231",1),
|
||||
}
|
||||
},
|
||||
Child = new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
MarginLeft = 0,
|
||||
Children =
|
||||
{
|
||||
new TextBlock
|
||||
{
|
||||
[nameof(TextBlock.Text)] = new BindingDescribe(this,nameof(this.Title),BindingMode.OneWay),
|
||||
FontSize = 14,
|
||||
MarginLeft = 10,
|
||||
},
|
||||
}
|
||||
},
|
||||
new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
MarginRight = 0,
|
||||
Height = "100%",
|
||||
Children =
|
||||
{
|
||||
new SystemButton
|
||||
{
|
||||
Name = "min",
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Line
|
||||
{
|
||||
MarginTop = 5,
|
||||
MarginLeft = "auto",
|
||||
StartPoint = new Point(1,13),
|
||||
EndPoint = new Point(14,13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias = true,
|
||||
StrokeFill = "black"
|
||||
}
|
||||
},
|
||||
new Panel
|
||||
{
|
||||
Height = "100%",
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(MaximizeBox),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a => (bool)a ? Visibility.Visible : Visibility.Collapsed
|
||||
}
|
||||
},
|
||||
Children =
|
||||
{
|
||||
new SystemButton
|
||||
{
|
||||
Name = "max",
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Rectangle
|
||||
{
|
||||
Size = new SizeField(14,12),
|
||||
MarginTop = 10,
|
||||
StrokeStyle = "2",
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{ nameof(Button.Click),(s,e) => this.WindowState = WindowState.Maximized }
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(this.WindowState),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Maximized || (WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
}
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
Name = "nor",
|
||||
Visibility = Visibility.Collapsed,
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new Rectangle
|
||||
{
|
||||
MarginTop = 15,
|
||||
MarginLeft =8,
|
||||
Size = new SizeField(11,8),
|
||||
StrokeStyle = "1.5",
|
||||
},
|
||||
new Polyline
|
||||
{
|
||||
MarginTop =11,
|
||||
MarginLeft = 12,
|
||||
Points =
|
||||
{
|
||||
new Point(0,3),
|
||||
new Point(0,0),
|
||||
new Point(9,0),
|
||||
new Point(9,7),
|
||||
new Point(6,7)
|
||||
},
|
||||
StrokeStyle = "2"
|
||||
}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{ nameof(Button.Click),(s,e) => this.WindowState = WindowState.Normal }
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(Window.WindowState),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
Name = "close",
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new Line
|
||||
{
|
||||
MarginTop=10,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(1, 1),
|
||||
EndPoint = new Point(14, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
},
|
||||
new Line
|
||||
{
|
||||
MarginTop=10,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(14, 1),
|
||||
EndPoint = new Point(1, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}.Assign(out var thumb),
|
||||
new Panel
|
||||
{
|
||||
Attacheds = { { Grid.RowIndex,1 } },
|
||||
BorderFill = "186,210,234",
|
||||
BorderType = BorderType.BorderThickness,
|
||||
BorderThickness = new Thickness(5,0,5,5),
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -3,52 +3,255 @@ using CPF.Animation;
|
||||
using CPF.Charts;
|
||||
using CPF.Controls;
|
||||
using CPF.Drawing;
|
||||
using CPF.Input;
|
||||
using CPF.Platform;
|
||||
using CPF.Shapes;
|
||||
using CPF.Styling;
|
||||
using CPF.Svg;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
namespace CPF.Toolkit.Controls
|
||||
{
|
||||
public class MdiWindow : Control, IWindow
|
||||
public class MdiWindow : Control
|
||||
{
|
||||
public WindowState WindowState { get => GetValue<WindowState>(); set => SetValue(value); }
|
||||
public Image Icon { get => GetValue<Image>(); set => SetValue(value); }
|
||||
public string Title { get => GetValue<string>(); set => SetValue(value); }
|
||||
public UIElement Content { get => GetValue<UIElement>(); set => SetValue(value); }
|
||||
//protected override UIElementCollection Children => throw new NotImplementedException();
|
||||
WindowFrame frame;
|
||||
[PropertyMetadata(true)]
|
||||
public bool MaximizeBox { get { return GetValue<bool>(); } set { SetValue(value); } }
|
||||
[PropertyMetadata(true)]
|
||||
public bool MinimizeBox { get { return GetValue<bool>(); } set { SetValue(value); } }
|
||||
|
||||
SizeField normalSize = new SizeField(500, 500);
|
||||
public void Close()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void DragMove()
|
||||
{
|
||||
}
|
||||
|
||||
Point normalPos = new Point(0, 0);
|
||||
protected override void InitializeComponent()
|
||||
{
|
||||
this.Size = this.normalSize;
|
||||
this.frame = base.Children.Add(new WindowFrame(this, this.Content));
|
||||
frame.MaximizeBox = true;
|
||||
this.Size = normalSize;
|
||||
this.Background = "white";
|
||||
this.BorderFill = "179,179,179";
|
||||
this.BorderStroke = "1";
|
||||
this.MarginLeft = 0;
|
||||
this.MarginTop = 0;
|
||||
base.Children.Add(new Grid
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
RowDefinitions =
|
||||
{
|
||||
new RowDefinition{ Height = 35 },
|
||||
new RowDefinition{ },
|
||||
},
|
||||
Children =
|
||||
{
|
||||
new Thumb
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Background = new LinearGradientFill
|
||||
{
|
||||
EndPoint = "0,100%",
|
||||
GradientStops =
|
||||
{
|
||||
new GradientStop("152,180,208",0),
|
||||
new GradientStop("181,206,231",1),
|
||||
}
|
||||
},
|
||||
Child = new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
MarginLeft = 0,
|
||||
Children =
|
||||
{
|
||||
new TextBlock
|
||||
{
|
||||
[nameof(TextBlock.Text)] = new BindingDescribe(this,nameof(this.Title),BindingMode.OneWay),
|
||||
FontSize = 14,
|
||||
MarginLeft = 10,
|
||||
},
|
||||
}
|
||||
},
|
||||
new StackPanel
|
||||
{
|
||||
Orientation = Orientation.Horizontal,
|
||||
MarginRight = 0,
|
||||
Height = "100%",
|
||||
Children =
|
||||
{
|
||||
new SystemButton
|
||||
{
|
||||
Name = "min",
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Line
|
||||
{
|
||||
MarginTop = 5,
|
||||
MarginLeft = "auto",
|
||||
StartPoint = new Point(1,13),
|
||||
EndPoint = new Point(14,13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias = true,
|
||||
StrokeFill = "black"
|
||||
}
|
||||
},
|
||||
new Panel
|
||||
{
|
||||
Height = "100%",
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(MaximizeBox),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a => (bool)a ? Visibility.Visible : Visibility.Collapsed
|
||||
}
|
||||
},
|
||||
Children =
|
||||
{
|
||||
new SystemButton
|
||||
{
|
||||
Name = "max",
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Rectangle
|
||||
{
|
||||
Size = new SizeField(14,12),
|
||||
MarginTop = 10,
|
||||
StrokeStyle = "2",
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{ nameof(Button.Click),(s,e) => this.WindowState = WindowState.Maximized }
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(this.WindowState),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Maximized || (WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
}
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
Name = "nor",
|
||||
Visibility = Visibility.Collapsed,
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new Rectangle
|
||||
{
|
||||
MarginTop = 15,
|
||||
MarginLeft =8,
|
||||
Size = new SizeField(11,8),
|
||||
StrokeStyle = "1.5",
|
||||
},
|
||||
new Polyline
|
||||
{
|
||||
MarginTop =11,
|
||||
MarginLeft = 12,
|
||||
Points =
|
||||
{
|
||||
new Point(0,3),
|
||||
new Point(0,0),
|
||||
new Point(9,0),
|
||||
new Point(9,7),
|
||||
new Point(6,7)
|
||||
},
|
||||
StrokeStyle = "2"
|
||||
}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{ nameof(Button.Click),(s,e) => this.WindowState = WindowState.Normal }
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(Window.WindowState),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
Name = "close",
|
||||
Size = new SizeField(30,"100%"),
|
||||
Content = new Panel
|
||||
{
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new Line
|
||||
{
|
||||
MarginTop=10,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(1, 1),
|
||||
EndPoint = new Point(14, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
},
|
||||
new Line
|
||||
{
|
||||
MarginTop=10,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(14, 1),
|
||||
EndPoint = new Point(1, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}.Assign(out var thumb),
|
||||
new Panel
|
||||
{
|
||||
Attacheds = { { Grid.RowIndex,1 } },
|
||||
BorderFill = "186,210,234",
|
||||
BorderType = BorderType.BorderThickness,
|
||||
BorderThickness = new Thickness(5,0,5,5),
|
||||
Size = SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
|
||||
var caption = frame.Find<Panel>().FirstOrDefault(x => x.Name == "caption");
|
||||
caption.Background = "white";
|
||||
caption.BorderType = BorderType.BorderThickness;
|
||||
caption.BorderThickness = new Thickness(0, 0, 0, 1);
|
||||
caption.BorderFill = "235,235,235";
|
||||
},
|
||||
},
|
||||
}
|
||||
});
|
||||
thumb.DragDelta += Thumb_DragDelta;
|
||||
}
|
||||
|
||||
var title = frame.Find<TextBlock>().FirstOrDefault(x => x.Name == "title");
|
||||
title.Foreground = "black";
|
||||
|
||||
frame.ControlBoxStroke = "black";
|
||||
private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
|
||||
{
|
||||
if (this.WindowState == WindowState.Maximized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.MarginLeft += e.HorizontalChange;
|
||||
this.MarginTop += e.VerticalChange;
|
||||
this.normalPos = new Point(this.MarginLeft.Value, this.MarginTop.Value);
|
||||
}
|
||||
|
||||
protected override void OnPropertyChanged(string propertyName, object oldValue, object newValue, PropertyMetadataAttribute propertyMetadata)
|
||||
@ -56,36 +259,66 @@ namespace CPF.Toolkit.Controls
|
||||
switch (propertyName)
|
||||
{
|
||||
case nameof(WindowState):
|
||||
switch (this.WindowState)
|
||||
{
|
||||
case WindowState.Normal:
|
||||
{
|
||||
this.Size = this.normalSize;
|
||||
}
|
||||
break;
|
||||
case WindowState.Minimized:
|
||||
break;
|
||||
case WindowState.Maximized:
|
||||
{
|
||||
this.Size = SizeField.Fill;
|
||||
}
|
||||
break;
|
||||
case WindowState.FullScreen:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case nameof(Width):
|
||||
case nameof(Height):
|
||||
case nameof(Size):
|
||||
{
|
||||
if (WindowState == WindowState.Normal)
|
||||
switch (this.WindowState)
|
||||
{
|
||||
this.Size = this.normalSize;
|
||||
case WindowState.Normal:
|
||||
this.Size = this.normalSize;
|
||||
this.MarginLeft = this.normalPos.X;
|
||||
this.MarginTop = this.normalPos.Y;
|
||||
break;
|
||||
case WindowState.Minimized:
|
||||
break;
|
||||
case WindowState.Maximized:
|
||||
this.Size = SizeField.Fill;
|
||||
this.MarginLeft = 0;
|
||||
this.MarginTop = 0;
|
||||
break;
|
||||
case WindowState.FullScreen:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case nameof(Size):
|
||||
case nameof(Width):
|
||||
case nameof(Height):
|
||||
if (this.WindowState == WindowState.Normal)
|
||||
{
|
||||
this.normalSize = this.Size;
|
||||
}
|
||||
break;
|
||||
|
||||
case nameof(MarginLeft):
|
||||
{
|
||||
if (this.MarginLeft.Value <= 0)
|
||||
{
|
||||
this.MarginLeft = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
var value = this.MarginLeft.Value + this.Width.Value;
|
||||
Debug.WriteLine(value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case nameof(MarginTop):
|
||||
if (MarginTop.Value <= 0)
|
||||
{
|
||||
this.MarginTop = 0;
|
||||
}
|
||||
break;
|
||||
//case nameof(MarginRight):
|
||||
// if (MarginRight.Value <= 0)
|
||||
// {
|
||||
// this.MarginRight = 0;
|
||||
// }
|
||||
// break;
|
||||
//case nameof(MarginBottom):
|
||||
|
||||
// break;
|
||||
}
|
||||
|
||||
base.OnPropertyChanged(propertyName, oldValue, newValue, propertyMetadata);
|
||||
}
|
||||
}
|
||||
|
@ -98,6 +98,16 @@ namespace CPF.Controls
|
||||
[PropertyMetadata(typeof(ViewFill), "white")]
|
||||
public ViewFill ControlBoxStroke { get => GetValue<ViewFill>(); set => SetValue(value); }
|
||||
|
||||
[PropertyMetadata(typeof(ViewFill), "#1E9FFF")]
|
||||
public ViewFill CaptionBackgrund { get => GetValue<ViewFill>(); set => SetValue(value); }
|
||||
|
||||
[PropertyMetadata(typeof(ViewFill), "white")]
|
||||
public ViewFill CaptionForeground { get => GetValue<ViewFill>(); set => SetValue(value); }
|
||||
|
||||
[PropertyMetadata(typeof(FloatField), "35")]
|
||||
public FloatField CaptionHeight { get => GetValue<FloatField>(); set => SetValue(value); }
|
||||
|
||||
|
||||
protected override void InitializeComponent()
|
||||
{
|
||||
//ViewFill color = "#fff";
|
||||
@ -163,351 +173,354 @@ namespace CPF.Controls
|
||||
});
|
||||
//标题栏和按钮
|
||||
grid.Children.Add(
|
||||
new Panel
|
||||
{
|
||||
Name = "caption",
|
||||
Background = "#1E9FFF",
|
||||
Width = "100%",
|
||||
Height = "30",
|
||||
Commands =
|
||||
new Panel
|
||||
{
|
||||
Name = "caption",
|
||||
Width = "100%",
|
||||
Bindings =
|
||||
{
|
||||
nameof(MouseDown),
|
||||
nameof(IWindow.DragMove),
|
||||
Window
|
||||
{ nameof(Panel.Background),nameof(this.CaptionBackgrund),this},
|
||||
{ nameof(Panel.Height),nameof(this.CaptionHeight),this},
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
nameof(DoubleClick),
|
||||
(s,e)=> DoubleClickTitle()
|
||||
}
|
||||
},
|
||||
Children =
|
||||
{
|
||||
new StackPanel
|
||||
{
|
||||
Name="titleBox",
|
||||
MarginLeft=0,
|
||||
Orientation= Orientation.Horizontal,
|
||||
Children=
|
||||
{
|
||||
new Picture
|
||||
{
|
||||
Name="icon",
|
||||
MarginLeft=5,
|
||||
Width=20,
|
||||
Height=20,
|
||||
Stretch= Stretch.Fill,
|
||||
Bindings=
|
||||
{
|
||||
{
|
||||
nameof(Picture.Source),
|
||||
nameof(window.Icon),
|
||||
window
|
||||
},
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(window.Icon),
|
||||
window,
|
||||
BindingMode.OneWay,
|
||||
a=>a==null||!ShowIcon?Visibility.Collapsed:Visibility.Visible
|
||||
},
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(ShowIcon),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
(bool showIcon)=>!showIcon||window.Icon==null?Visibility.Collapsed:Visibility.Visible
|
||||
}
|
||||
}
|
||||
},
|
||||
new TextBlock
|
||||
{
|
||||
Name="title",
|
||||
MarginLeft=8,
|
||||
MarginTop=2,
|
||||
Bindings=
|
||||
{
|
||||
{
|
||||
nameof(TextBlock.Text),
|
||||
nameof(IWindow.Title),
|
||||
Window
|
||||
}
|
||||
},
|
||||
Foreground="#fff"
|
||||
},
|
||||
nameof(MouseDown),
|
||||
nameof(IWindow.DragMove),
|
||||
Window
|
||||
},
|
||||
{
|
||||
nameof(DoubleClick),
|
||||
(s,e)=> DoubleClickTitle()
|
||||
}
|
||||
},
|
||||
new StackPanel
|
||||
Children =
|
||||
{
|
||||
Name="controlBox",
|
||||
MarginRight=0,
|
||||
Height = "100%",
|
||||
Orientation= Orientation.Horizontal,
|
||||
Children =
|
||||
new StackPanel
|
||||
{
|
||||
systemButtons,
|
||||
new SystemButton
|
||||
Name="titleBox",
|
||||
MarginLeft=0,
|
||||
Orientation= Orientation.Horizontal,
|
||||
Children=
|
||||
{
|
||||
ToolTip="最小化",
|
||||
Name="min",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content=
|
||||
new Line
|
||||
new Picture
|
||||
{
|
||||
MarginLeft="auto",
|
||||
MarginTop=5,
|
||||
StartPoint = new Point(1, 13),
|
||||
EndPoint = new Point(14, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
//StrokeFill=color
|
||||
Bindings =
|
||||
Name="icon",
|
||||
MarginLeft=5,
|
||||
Width=20,
|
||||
Height=20,
|
||||
Stretch= Stretch.Fill,
|
||||
Bindings=
|
||||
{
|
||||
{ nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this}
|
||||
}
|
||||
},
|
||||
Bindings=
|
||||
{
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(MinimizeBox),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a=>(bool)a?Visibility.Visible: Visibility.Collapsed
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled = true;
|
||||
Window.WindowState = WindowState.Minimized;
|
||||
nameof(Picture.Source),
|
||||
nameof(window.Icon),
|
||||
window
|
||||
},
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(window.Icon),
|
||||
window,
|
||||
BindingMode.OneWay,
|
||||
a=>a==null||!ShowIcon?Visibility.Collapsed:Visibility.Visible
|
||||
},
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(ShowIcon),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
(bool showIcon)=>!showIcon||window.Icon==null?Visibility.Collapsed:Visibility.Visible
|
||||
}
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
new TextBlock
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
Name="title",
|
||||
MarginLeft=8,
|
||||
MarginTop=2,
|
||||
Bindings=
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
}
|
||||
}
|
||||
}
|
||||
nameof(TextBlock.Text),
|
||||
nameof(IWindow.Title),
|
||||
Window
|
||||
},
|
||||
{ nameof(TextBlock.Foreground),nameof(this.CaptionForeground),this }
|
||||
},
|
||||
},
|
||||
}
|
||||
,
|
||||
new Panel
|
||||
},
|
||||
new StackPanel
|
||||
{
|
||||
Name="controlBox",
|
||||
MarginRight=0,
|
||||
Height = "100%",
|
||||
Orientation= Orientation.Horizontal,
|
||||
Children =
|
||||
{
|
||||
Height = "100%",
|
||||
Bindings=
|
||||
systemButtons,
|
||||
new SystemButton
|
||||
{
|
||||
ToolTip="最小化",
|
||||
Name="min",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content=
|
||||
new Line
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(MaximizeBox),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a=>(bool)a?Visibility.Visible: Visibility.Collapsed
|
||||
}
|
||||
},
|
||||
Children=
|
||||
{
|
||||
new SystemButton
|
||||
{
|
||||
ToolTip="最大化",
|
||||
Name="max",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content= new Rectangle
|
||||
MarginLeft="auto",
|
||||
MarginTop=5,
|
||||
StartPoint = new Point(1, 13),
|
||||
EndPoint = new Point(14, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
//StrokeFill=color
|
||||
Bindings =
|
||||
{
|
||||
Width=14,
|
||||
Height=12,
|
||||
MarginTop=10,
|
||||
StrokeStyle="2",
|
||||
{ nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this}
|
||||
}
|
||||
},
|
||||
Bindings=
|
||||
{
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(MinimizeBox),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a=>(bool)a?Visibility.Visible: Visibility.Collapsed
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled = true;
|
||||
Window.WindowState = WindowState.Minimized;
|
||||
}
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
,
|
||||
new Panel
|
||||
{
|
||||
Height = "100%",
|
||||
Bindings=
|
||||
{
|
||||
{
|
||||
nameof(Visibility),
|
||||
nameof(MaximizeBox),
|
||||
this,
|
||||
BindingMode.OneWay,
|
||||
a=>(bool)a?Visibility.Visible: Visibility.Collapsed
|
||||
}
|
||||
},
|
||||
Children=
|
||||
{
|
||||
new SystemButton
|
||||
{
|
||||
ToolTip="最大化",
|
||||
Name="max",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content= new Rectangle
|
||||
{
|
||||
Width=14,
|
||||
Height=12,
|
||||
MarginTop=10,
|
||||
StrokeStyle="2",
|
||||
Bindings =
|
||||
{
|
||||
{ nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled = true;
|
||||
Window.WindowState= WindowState.Maximized;
|
||||
}
|
||||
}
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{ nameof(Line.StrokeFill),nameof(this.ControlBoxStroke),this}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled = true;
|
||||
Window.WindowState= WindowState.Maximized;
|
||||
nameof(Border.Visibility),
|
||||
nameof(Window.WindowState),
|
||||
Window,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Maximized||(WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
}
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(Window.WindowState),
|
||||
Window,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Maximized||(WindowState)a == WindowState.FullScreen ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
ToolTip="向下还原",
|
||||
Name="nor",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content=new Panel{
|
||||
Size=SizeField.Fill,
|
||||
Children=
|
||||
{
|
||||
new Rectangle
|
||||
new SystemButton
|
||||
{
|
||||
ToolTip="向下还原",
|
||||
Name="nor",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content=new Panel{
|
||||
Size=SizeField.Fill,
|
||||
Children=
|
||||
{
|
||||
MarginTop=15,
|
||||
MarginLeft=8,
|
||||
Width=11,
|
||||
Height=8,
|
||||
StrokeStyle="1.5",
|
||||
//StrokeFill = color
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } },
|
||||
},
|
||||
new Polyline
|
||||
{
|
||||
MarginTop=11,
|
||||
MarginLeft=12,
|
||||
Points=
|
||||
new Rectangle
|
||||
{
|
||||
new Point(0,3),
|
||||
new Point(0,0),
|
||||
new Point(9,0),
|
||||
new Point(9,7),
|
||||
new Point(6,7)
|
||||
MarginTop=15,
|
||||
MarginLeft=8,
|
||||
Width=11,
|
||||
Height=8,
|
||||
StrokeStyle="1.5",
|
||||
//StrokeFill = color
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } },
|
||||
},
|
||||
//StrokeFill = color,
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } },
|
||||
StrokeStyle="2"
|
||||
}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled = true;
|
||||
Window.WindowState = WindowState.Normal;
|
||||
}
|
||||
}
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(Window.WindowState),
|
||||
Window,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
new Polyline
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
MarginTop=11,
|
||||
MarginLeft=12,
|
||||
Points=
|
||||
{
|
||||
new Point(0,3),
|
||||
new Point(0,0),
|
||||
new Point(9,0),
|
||||
new Point(9,7),
|
||||
new Point(6,7)
|
||||
},
|
||||
//StrokeFill = color,
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } },
|
||||
StrokeStyle="2"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
Name="close",
|
||||
ToolTip="关闭",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content=new Panel{
|
||||
Size=SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new Line
|
||||
{
|
||||
MarginTop=8,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(1, 1),
|
||||
EndPoint = new Point(14, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
//StrokeFill=color
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }
|
||||
},
|
||||
new Line
|
||||
{
|
||||
MarginTop=8,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(14, 1),
|
||||
EndPoint = new Point(1, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
//StrokeFill=color
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }
|
||||
}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled=true;
|
||||
Window.Close();
|
||||
}
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
}
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled = true;
|
||||
Window.WindowState = WindowState.Normal;
|
||||
}
|
||||
}
|
||||
},
|
||||
Bindings =
|
||||
{
|
||||
{
|
||||
nameof(Border.Visibility),
|
||||
nameof(Window.WindowState),
|
||||
Window,
|
||||
BindingMode.OneWay,
|
||||
a => (WindowState)a == WindowState.Normal ? Visibility.Collapsed : Visibility.Visible
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
new SystemButton
|
||||
{
|
||||
Name="close",
|
||||
ToolTip="关闭",
|
||||
Width = 30,
|
||||
Height = "100%",
|
||||
Content=new Panel{
|
||||
Size=SizeField.Fill,
|
||||
Children =
|
||||
{
|
||||
new Line
|
||||
{
|
||||
MarginTop=8,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(1, 1),
|
||||
EndPoint = new Point(14, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
//StrokeFill=color
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }
|
||||
},
|
||||
new Line
|
||||
{
|
||||
MarginTop=8,
|
||||
MarginLeft=8,
|
||||
StartPoint = new Point(14, 1),
|
||||
EndPoint = new Point(1, 13),
|
||||
StrokeStyle = "2",
|
||||
IsAntiAlias=true,
|
||||
//StrokeFill=color
|
||||
Bindings = { { nameof(Line.StrokeFill), nameof(this.ControlBoxStroke), this } }
|
||||
}
|
||||
}
|
||||
},
|
||||
Commands =
|
||||
{
|
||||
{
|
||||
nameof(Button.Click),
|
||||
(s,e)=>
|
||||
{
|
||||
//(e as MouseButtonEventArgs).Handled=true;
|
||||
Window.Close();
|
||||
}
|
||||
}
|
||||
},
|
||||
Triggers=
|
||||
{
|
||||
new Trigger(nameof(Panel.IsMouseOver), Relation.Me)
|
||||
{
|
||||
Setters =
|
||||
{
|
||||
{
|
||||
nameof(Panel.Background),
|
||||
hoverColor
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
if (Content != null)
|
||||
{
|
||||
grid.Children.Add(Content, 0, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user